
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
  <title>offtrainingmap</title>
  <meta name="x-build" content="2025-11-13T00:22"/>
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=M+PLUS+Rounded+1c:wght@400;500;700&display=swap"/>
  <style>

.leaflet-container { background-color: #bcdaf5 !important; } /* sea color (light blue) */
body { background-color: #bcdaf5 !important; font-family: 'M PLUS Rounded 1c','Hiragino Maru Gothic ProN','Kosugi Maru',system-ui,sans-serif; }


    html, body, #map { height: 100%; margin: 0; background: #bcdaf5; }
    html, body { overflow: hidden; overscroll-behavior: none; }
    #map { position: fixed; inset: 0; width: 100vw; height: 100dvh; touch-action: pan-x pan-y; }
    .relief-tiles { filter: brightness(1.25) contrast(0.9); }
    .map-label { font-size: 11px; font-weight: 500; color: #9CA3AF; white-space: nowrap; pointer-events: none; text-shadow: 0 0 3px rgba(255,255,255,0.8), 0 0 6px rgba(255,255,255,0.7); }
  
/* name-icons (icons next to facility name) */
.name-icons { margin-left: .25rem; vertical-align: middle; }
.name-icons img { vertical-align: middle; margin-left: 4px; }

/* rental */
.rental-toggle { background:#f3f4f6; border:1px solid #e5e7eb; border-radius:.5rem; padding:.35rem .6rem; font-size:.88rem; cursor:pointer; color:#111; }
.rental-toggle .r-arrow { color:#6b7280; margin-right:.25rem; }
.rental-toggle:focus { outline:none; }
.rental-list { margin:.25rem 0 0 .9rem; padding:0; list-style:disc; }
.rental-list li { margin:.1rem 0; }
.rental-empty { color:#6b7280; }

/* rental icons */
.rental-icons { display:flex; flex-wrap:wrap; gap:10px 12px; margin-top:.25rem; }
.rental-icons .ri { width:48px; height:48px; border-radius:10px; background:#f8fafc; border:1px solid #e5e7eb; display:flex; align-items:center; justify-content:center; }
.rental-icons .ri img { max-width:36px; max-height:36px; }
.rental-icons .ri-pill { padding:6px 10px; height:auto; width:auto; font-size:.86rem; background:#f5f5f5; border-color:#e5e5e5; border-radius:999px; }
/* caption on tap (mobile) */
.rental-icons .ri { position: relative; cursor: pointer; }
.rental-icons .ri .ri-cap { display:none; position:absolute; bottom:-22px; left:50%; transform:translateX(-50%); font-size:11px; background:#fff; border:1px solid #e5e7eb; border-radius:8px; padding:2px 6px; color:#111; white-space:nowrap; box-shadow:0 1px 3px rgba(0,0,0,.1); z-index:2; }
.rental-icons .ri.show-cap .ri-cap { display:block; }

/* ============================================= */
/* New Popup Card UI (tabbed, blue header)       */
/* ============================================= */
.pcard { min-width: 280px; max-width: 320px; border-radius: 16px; overflow: hidden; font-family: 'M PLUS Rounded 1c','Hiragino Maru Gothic ProN',system-ui,sans-serif; font-size: 13px; color: #111; background: #fff; }
.pcard-header { background: #000; color: #fff; padding: 14px 16px; display: flex; gap: 12px; align-items: center; position: relative; }
.pcard-logo { width: 44px; height: 44px; border-radius: 12px; background: rgba(255,255,255,.2); overflow: hidden; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
.pcard-logo img { width: 100%; height: 100%; object-fit: contain; display: block; }
.pcard-logo-placeholder { font-size: 20px; }
.pcard-hinfo { flex: 1; min-width: 0; }
.pcard-name { font-size: 15px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pcard-area { font-size: 11px; opacity: .85; margin-top: 2px; }
.pcard-close { position: absolute; top: 10px; right: 10px; width: 24px; height: 24px; background: rgba(255,255,255,.2); border: none; border-radius: 50%; color: #fff; font-size: 14px; cursor: pointer; display: flex; align-items: center; justify-content: center; line-height: 1; }
.pcard-close:hover { background: rgba(255,255,255,.35); }
.pcard-badge { display: inline-block; background: rgba(255,255,255,.25); color: #fff; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 6px; margin-top: 6px; }
.pcard-tabs { display: flex; border-bottom: 1px solid #e5e7eb; }
.pcard-tab { flex: 1; text-align: center; padding: 10px 0; font-size: 13px; font-weight: 500; color: #6b7280; cursor: pointer; border-bottom: 2px solid transparent; background: none; border-top: none; border-left: none; border-right: none; font-family: inherit; transition: all .15s; }
.pcard-tab.active { color: #000; border-bottom-color: #000; font-weight: 700; }
.pcard-panel { display: none; padding: 14px 16px; max-height: 260px; overflow-y: auto; }
.pcard-panel.active { display: block; }
.pcard-row { display: flex; align-items: flex-start; gap: 10px; padding: 10px 0; border-bottom: 1px solid #f3f4f6; }
.pcard-row:last-child { border-bottom: none; }
.pcard-row-icon { width: 28px; height: 28px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: #f5f5f5; color: #000; font-size: 14px; }
.pcard-row-body { flex: 1; min-width: 0; }
.pcard-row-label { font-size: 11px; color: #9ca3af; }
.pcard-row-val { font-size: 13px; font-weight: 600; color: #111; margin-top: 1px; }
.pcard-features { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px 0; }
.pcard-features-title { font-size: 12px; color: #6b7280; margin-bottom: 4px; width: 100%; }
.pcard-feat { width: 36px; height: 36px; border-radius: 8px; background: #f3f4f6; display: flex; align-items: center; justify-content: center; }
.pcard-feat img { width: 24px; height: 24px; object-fit: contain; }
.pcard-footer { display: flex; gap: 8px; padding: 12px 16px; border-top: 1px solid #e5e7eb; }
.pcard-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 10px 0; border-radius: 10px; font-size: 13px; font-weight: 600; cursor: pointer; text-decoration: none; font-family: inherit; border: none; }
.pcard-btn-map { background: #000; color: #fff !important; }
.pcard-btn-map:hover { background: #222; color: #fff !important; }
.pcard-btn-map:visited { color: #fff !important; }
.pcard-btn-map:active { color: #fff !important; }
.pcard-btn-rental { background: #fff; color: #000; border: 1.5px solid #000; }
.pcard-btn-rental:hover { background: #f5f5f5; }
/* Weather inside card tab */
.pcard-wx-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.pcard-wx-title { font-size: 13px; font-weight: 600; color: #111; margin: 0; }
.pcard-wx-arrows { display: flex; gap: 4px; }
.pcard-wx-arrow { width: 28px; height: 28px; border-radius: 50%; border: 1px solid #e5e7eb; background: #fff; color: #6b7280; font-size: 14px; cursor: pointer; display: flex; align-items: center; justify-content: center; font-family: inherit; }
.pcard-wx-arrow:hover { background: #f3f4f6; }
.pcard-wx-strip { display: flex; gap: 8px; overflow-x: auto; padding: 4px 0; scrollbar-width: none; }
.pcard-wx-strip::-webkit-scrollbar { display: none; }
.pcard-wx-strip .wx-cell { width: 60px; min-width: 60px; text-align: center; background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 10px 4px; }
.pcard-wx-strip .wx-cell:first-child { border-color: #000; background: #f5f5f5; }
.pcard-wx-strip .wx-hour { font-size: 11px; color: #6b7280; margin-bottom: 4px; font-weight: 500; }
.pcard-wx-strip .wx-cell:first-child .wx-hour { color: #000; font-weight: 700; }
.pcard-wx-strip .wx-emoji-box { font-size: 22px; margin: 6px 0; background: transparent; border: none; padding: 0; line-height: 1; }
.pcard-wx-strip .wx-temp { font-size: 13px; font-weight: 700; color: #111; }
/* Crowd inside card tab – single-day stage view */
.pcard-crowd-wrap { padding: 0; }
.pcard-crowd-wrap .wx-hrs { display: none; }
.pcard-crowd-header {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 4px;
}
.pcard-crowd-title { font-size: 12px; font-weight: 600; color: #111; white-space: nowrap; margin: 0; margin-right: 4px; flex-shrink: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.pcard-crowd-days { display: flex; gap: 0; flex-wrap: nowrap; flex-shrink: 0; }
.pcard-crowd-day {
  border: none; background: none; padding: 0; font-size: 11px; font-weight: 600;
  color: #9ca3af; cursor: pointer; border-radius: 999px; font-family: inherit;
  width: 26px; height: 26px; line-height: 26px; text-align: center; flex: 0 0 auto;
}
.pcard-crowd-day:hover { background: #f3f4f6; color: #6b7280; }
.pcard-crowd-day.active { background: #e5e7eb; color: #111; }
.pcard-crowd-stage {
  --cr-bar-w: 24px; --cr-gap: 14px; --cr-color: #22b8b8;
  display: flex; flex-direction: column; align-items: center;
  justify-content: center;
  min-height: 140px; padding: 0 0 4px;
}
.pcard-crowd-stage .cr-graph-scale {
  display: flex; flex-direction: column; align-items: center;
  zoom: 1.7;
}
.pcard-crowd-legend { display: none; }
/* Override leaflet popup for card */
.leaflet-popup-content-wrapper:has(.pcard) { padding: 0; border-radius: 16px; overflow: hidden; box-shadow: 0 8px 30px rgba(0,0,0,.15); }
.leaflet-popup-content:has(.pcard) { margin: 0; width: auto !important; }
.leaflet-popup-close-button { display: none !important; }
/* rental inside card */
.pcard-rental-box { display: none; margin-top: 8px; border: 1px solid #e5e7eb; border-radius: 8px; padding: 8px; font-size: 12px; }

/* ========================================= */
/* HAKU Header + Filter Bar Overlay          */
/* ========================================= */
.haku-header {
  position: fixed; top: 0; left: 0; right: 0; z-index: 10100;
  display: flex; align-items: center; justify-content: space-between;
  height: 48px; padding: 0 16px;
  background: #fff; border-bottom: 1px solid #e5e7eb;
  font-family: 'M PLUS Rounded 1c','Hiragino Maru Gothic ProN',system-ui,sans-serif;
  box-sizing: border-box;
}
.haku-header-left { display: flex; align-items: center; gap: 0; }
.haku-header-brand { display: flex; align-items: baseline; gap: 6px; }
.haku-header-brand-main { font-size: 17px; font-weight: 800; color: #111; letter-spacing: .03em; }
.haku-header-brand-sub { font-size: 11px; font-weight: 400; color: #9ca3af; }
.haku-header-sep { color: #d1d5db; font-size: 14px; margin: 0 12px; user-select: none; }
.haku-header-count { font-size: 13px; font-weight: 600; color: #6b7280; letter-spacing: .02em; white-space: nowrap; }
.haku-header-count strong { color: #111; font-weight: 700; margin-right: 2px; }
.haku-header-tabs { display: flex; gap: 6px; }
.haku-header-tab {
  appearance: none; border: 1px solid #e5e7eb; background: #fff; color: #6b7280;
  border-radius: 8px; padding: 6px 14px; font-size: 13px; font-weight: 600;
  cursor: pointer; font-family: inherit; transition: all .15s;
  display: flex; align-items: center; gap: 5px;
}
.haku-header-tab:hover { background: #f3f4f6; }
.haku-header-tab.active { background: #111; color: #fff; border-color: #111; }
.haku-header-tab svg { width: 14px; height: 14px; flex-shrink: 0; }

.haku-filter-bar {
  position: fixed; top: 48px; left: 0; right: 0; z-index: 10099;
  background: #fff; border-bottom: 1px solid #e5e7eb;
  padding: 0; box-sizing: border-box;
  font-family: 'M PLUS Rounded 1c','Hiragino Maru Gothic ProN',system-ui,sans-serif;
}
.haku-area-tabs {
  display: flex; gap: 0; overflow-x: auto; -webkit-overflow-scrolling: touch;
  scrollbar-width: none; padding: 0 12px; border-bottom: 1px solid #f3f4f6;
}
.haku-area-tabs::-webkit-scrollbar { display: none; }
.haku-area-tab {
  appearance: none; border: none; background: transparent; color: #6b7280;
  font-size: 13px; font-weight: 500; padding: 10px 14px;
  white-space: nowrap; cursor: pointer; border-bottom: 2px solid transparent;
  font-family: inherit; transition: all .15s; flex-shrink: 0;
}
.haku-area-tab.active { color: #111; border-bottom-color: #111; font-weight: 700; }
.haku-type-chips {
  display: flex; gap: 8px; padding: 8px 12px;
  overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.haku-type-chips::-webkit-scrollbar { display: none; }
.haku-type-chip {
  appearance: none; border: 1px solid #e5e7eb; background: #fff; color: #374151;
  border-radius: 999px; padding: 6px 14px; font-size: 12px; font-weight: 600;
  white-space: nowrap; cursor: pointer; font-family: inherit; transition: all .15s; flex-shrink: 0;
}
.haku-type-chip.active { background: #111; color: #fff; border-color: #111; }

.haku-list-placeholder {
  display: none; position: fixed; top: 48px; left: 0; right: 0; bottom: 0;
  z-index: 10098; background: #fff; align-items: center; justify-content: center;
  font-size: 16px; color: #9ca3af;
  font-family: 'M PLUS Rounded 1c','Hiragino Maru Gothic ProN',system-ui,sans-serif;
}
.haku-list-placeholder.show { display: flex; }

/* Hide original region buttons (replaced by area tabs) */
.region-zoom { display: none !important; }

@media (max-width: 768px) {
  .haku-header { height: 44px; padding: 0 10px; }
  .haku-filter-bar { top: 44px; }
  .haku-header-brand-main { font-size: 14px; }
  .haku-header-brand-sub { font-size: 10px; }
  .haku-header-sep { margin: 0 8px; font-size: 12px; }
  .haku-header-count { font-size: 12px; }
  .haku-header-tab { padding: 5px 10px; font-size: 11px; gap: 4px; }
  .haku-header-tab svg { width: 12px; height: 12px; }
  .haku-area-tab { font-size: 12px; padding: 8px 10px; }
  .haku-type-chip { font-size: 11px; padding: 5px 10px; }
}

  </style>
</head>
<body>
  <div id="map"></div>
  <a id="brand-logo" href="https://www.instagram.com/haku_forparkriding/" target="_blank" rel="noopener" aria-label="HAKU Instagram">
    <img src="./icons/haku_logo.png" alt="HAKU for park riding"/>
  </a>

  <!-- HAKU Header -->
  <div class="haku-header">
    <div class="haku-header-left">
      <div class="haku-header-brand">
        <span class="haku-header-brand-main">HAKU</span>
        <span class="haku-header-brand-sub">for park riding</span>
      </div>
      <span class="haku-header-sep">|</span>
      <span class="haku-header-count" id="haku-facility-count"></span>
    </div>
    <div class="haku-header-tabs">
      <button type="button" class="haku-header-tab active" data-view="map">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/></svg>
        マップ
      </button>
      <button type="button" class="haku-header-tab" data-view="list">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>
        リスト
      </button>
    </div>
  </div>

  <!-- Filter Bar -->
  <div class="haku-filter-bar">
    <div class="haku-area-tabs" id="haku-area-tabs">
      <button type="button" class="haku-area-tab active" data-area="all">全国</button>
      <button type="button" class="haku-area-tab" data-area="kanto">関東</button>
      <button type="button" class="haku-area-tab" data-area="hokuriku">北陸・甲信越</button>
      <button type="button" class="haku-area-tab" data-area="tokai">東海</button>
    </div>
    <div class="haku-type-chips" id="haku-type-chips">
      <button type="button" class="haku-type-chip active" data-type="all">すべて</button>
      <button type="button" class="haku-type-chip" data-type="ウォータージャンプ">ウォータージャンプ</button>
      <button type="button" class="haku-type-chip" data-type="エアマット">エアマット</button>
      <button type="button" class="haku-type-chip" data-type="ジブ">ジブ</button>
    </div>
  </div>

  <!-- List placeholder -->
  <div class="haku-list-placeholder" id="haku-list-placeholder">リスト表示は準備中です</div>

  <!-- Region zoom buttons -->
  <div id="region-zoom" class="region-zoom" aria-label="地域ズーム">
    <button type="button" data-region="kanto" class="rz-btn">関東</button>
    <button type="button" data-region="hokuriku" class="rz-btn">北陸・甲信越</button>
    <button type="button" data-region="tokai" class="rz-btn">東海</button>
  </div>
  <!-- Credits button and Contact button -->
  <button id="credits" class="credits-btn" type="button" aria-haspopup="dialog" aria-controls="credits-modal">クレジット</button>
  <button id="contact" class="credits-btn contact-btn" type="button" aria-haspopup="dialog" aria-controls="contact-modal">要望・お問い合わせ</button>
  <div id="credits-modal" class="credits-modal" hidden role="dialog" aria-modal="true" aria-labelledby="credits-title">
    <div class="credits-dialog">
      <button type="button" class="credits-close" aria-label="閉じる">×</button>
      <h3 id="credits-title" class="credits-title">サイトクレジット</h3>
      <dl class="credits-list">
        <dt>運営</dt><dd>HAKU/高科大河・牛島大和</dd>
        <dt>開発</dt><dd>HAKU/高科大河</dd>
        <dt>問い合わせ</dt><dd><a href="mailto:hakupark.snow@gmail.com">hakupark.snow@gmail.com</a></dd>
        <dt>天気データ</dt><dd><a href="https://open-meteo.com/" target="_blank" rel="noopener">Open-Meteo</a></dd>
        <dt>Map</dt><dd><a href="https://leafletjs.com" target="_blank" rel="noopener">Leaflet</a></dd>
        <dt>地図データ</dt><dd><a href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener">OpenStreetMap contributors</a></dd>
        <dt>Hosting</dt><dd>Cloudflare Pages</dd>
      </dl>
    </div>
  </div>
  <!-- Contact modal -->
  <div id="contact-modal" class="credits-modal" hidden role="dialog" aria-modal="true" aria-labelledby="contact-title">
    <div class="credits-dialog">
      <button type="button" class="credits-close" aria-label="閉じる">×</button>
      <h3 id="contact-title" class="credits-title">要望・お問い合わせ</h3>
      <div class="contact-box">
        <div class="contact-note">お気軽にご記入ください。メールアプリは開きません。</div>
        <textarea id="contact2-msg" class="contact-text" placeholder="ご要望・お問い合わせ内容" rows="6"></textarea>
        <div class="contact-actions">
          <button type="button" id="contact2-send" class="contact-send">送信</button>
        </div>
      </div>
    </div>
  </div>
  <style>
  .credits-btn { position: fixed; right: 12px; bottom: 12px; z-index: 10060; background: transparent; border: none; outline: none; color: #6b7280; border-radius: 12px; padding: 6px 12px; font-size: 12px; cursor: pointer; box-shadow: none; backdrop-filter: none; }
  .credits-btn:hover { background: transparent; }
  .credits-modal { position: fixed; inset: 0; background: rgba(8,10,16,.35); z-index: 10070; display: none; align-items: center; justify-content: center; backdrop-filter: blur(6px); }
  .credits-modal.open { display: flex; }
  .credits-dialog { position: relative; background: linear-gradient(180deg,#ffffff 0%,#fafafa 100%); border: 1px solid #e5e7eb; border-radius: 14px; max-width: 560px; width: calc(100% - 40px); padding: 18px 20px; box-shadow: 0 18px 50px rgba(0,0,0,.25); font-size: 14px; line-height: 1.7; transform-origin: center; animation: cr-pop .18s ease-out; }
  .credits-title { margin: 0 0 10px; font-size: 17px; font-weight: 700; letter-spacing: .02em; }
  .credits-title::after { content: ''; display: block; width: 56px; height: 3px; border-radius: 2px; background: #222; margin-top: 6px; }
  .contact-btn { position: fixed; right: 84px; bottom: 12px; z-index: 10060; }
  .credits-list { display: grid; grid-template-columns: 7em 1fr; column-gap: 12px; row-gap: 8px; }
  .credits-list dt { margin: 0; text-align: justify; text-align-last: justify; color: #6b7280; font-weight: 600; letter-spacing: .08em; }
  .credits-list dd { margin: 0; color: #111; word-break: break-word; }
  .credits-list a { color: #111; text-decoration: underline; border-bottom: none; padding-bottom: 1px; transition: color .12s ease; }
  .credits-list a:hover { color: #000; }
  .credits-col.form { display: none; }
  .contact-box { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 12px; box-shadow: 0 6px 16px rgba(0,0,0,.06); }
  .contact-title { font-weight: 700; margin-bottom: 6px; }
  .contact-note { font-size: 12px; color: #6b7280; margin-bottom: 8px; }
  .contact-text { width: 100%; max-width: 100%; box-sizing: border-box; min-height: 120px; padding: 8px 10px; border: 1px solid #d1d5db; border-radius: 8px; resize: vertical; font: inherit; }
  .contact-actions { display: flex; justify-content: flex-end; margin-top: 8px; }
  .contact-send { appearance: none; background: #111; color: #fff; border: none; border-radius: 8px; padding: 6px 12px; font-size: 13px; cursor: pointer; }
  .contact-send:hover { background: #000; }
  @media (max-width: 720px){ .credits-layout { grid-template-columns: 1fr; } }
  .credits-close { position: absolute; top: 10px; right: 12px; width: 28px; height: 28px; background: #f3f4f6; border: 1px solid #e5e7eb; border-radius: 9999px; font-size: 16px; line-height: 26px; cursor: pointer; color: #111; }
  .credits-close:hover { background: #e5e7eb; }
  @keyframes cr-pop { from { transform: scale(.98); opacity: 0; } to { transform: scale(1); opacity: 1; } }
  </style>
  <script>
  (function(){
    var btn = document.getElementById('credits');
    var modal = document.getElementById('credits-modal');
    if (btn && modal){
      function open(){ modal.classList.add('open'); modal.removeAttribute('hidden'); }
      function close(){ modal.classList.remove('open'); modal.setAttribute('hidden',''); }
      btn.addEventListener('click', open);
      try { modal.querySelector('.credits-close').addEventListener('click', close); } catch(e){}
      modal.addEventListener('click', function(e){ if (e.target === modal) close(); });
      document.addEventListener('keydown', function(ev){ if (ev.key === 'Escape') close(); });
    }
    var cbtn = document.getElementById('contact');
    var cmodal = document.getElementById('contact-modal');
    if (cbtn && cmodal){
      function openC(){ cmodal.classList.add('open'); cmodal.removeAttribute('hidden'); }
      function closeC(){ cmodal.classList.remove('open'); cmodal.setAttribute('hidden',''); }
      cbtn.addEventListener('click', openC);
      try { cmodal.querySelector('.credits-close').addEventListener('click', closeC); } catch(e){}
      cmodal.addEventListener('click', function(e){ if (e.target === cmodal) closeC(); });
      document.addEventListener('keydown', function(ev){ if (ev.key === 'Escape') closeC(); });
    }
    // contact send (APIに戻す: /api/contact 経由)
    try {
      var send = document.getElementById('contact2-send');
      if (send) send.addEventListener('click', async function(){
        var ta = document.getElementById('contact2-msg');
        var msg = (ta && ta.value || '').trim();
        if (!msg) { try { ta && ta.focus(); } catch(e){} return; }
        send.disabled = true; var old = send.textContent; send.textContent = '送信中…';
        try {
          var isFile = (location && location.protocol === 'file:');
          var CONTACT_URL = isFile
            ? 'https://haku-offtrainingmap.pages.dev/api/contact'
            : '/api/contact';
          // プリフライト回避のため simple request で送信
          var res = await fetch(CONTACT_URL, {
            method: 'POST',
            headers: { 'content-type': 'text/plain;charset=UTF-8' },
            body: JSON.stringify({ message: msg })
          });
          var ok = false;
          try { var j = await res.json(); ok = !!(res.ok && j && j.ok !== false); } catch(_){ ok = res.ok; }
          if (ok) {
            send.textContent = '送信しました';
            try { ta.value = ''; } catch(e){}
            setTimeout(function(){ send.textContent = old; send.disabled = false; }, 1800);
          } else {
            send.textContent = '失敗しました';
            setTimeout(function(){ send.textContent = old; send.disabled = false; }, 1800);
          }
        } catch(e){ send.textContent = '失敗しました'; setTimeout(function(){ send.textContent = old; send.disabled = false; }, 1800); }
      });
    } catch(e){}
  })();
  </script>
  <script>try{ window.LITE_BOOT = false; }catch(e){}</script>
  <!-- HAKU Filter + View Logic (deferred init) -->
  <script>
  (function(){
    'use strict';
    var allMarkerData = [];

    function getMap(){
      if (window.MAP && window.MAP instanceof L.Map) return window.MAP;
      if (window.map && window.map instanceof L.Map) return window.map;
      for (var k in window){ try { if (window[k] && window[k] instanceof L.Map) return window[k]; } catch(e){} }
      return null;
    }

    function collectMarkers(){
      allMarkerData = [];
      var mapInst = getMap();
      if (!mapInst) return;
      var facsList = [];
      try { if (typeof facs !== 'undefined' && Array.isArray(facs)) facsList = facs; } catch(e){}
      if (!facsList.length) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facsList = facilities; } catch(e){} }
      if (!facsList.length) { try { if (Array.isArray(window.facilities)) facsList = window.facilities; } catch(e){} }
      var facByName = {};
      for (var i = 0; i < facsList.length; i++){
        if (facsList[i] && facsList[i].name) facByName[facsList[i].name] = facsList[i];
      }
      mapInst.eachLayer(function(layer){
        if (!layer || typeof layer.getLatLng !== 'function') return;
        try { if (layer instanceof L.TileLayer) return; } catch(e){}
        try { if (layer instanceof L.GeoJSON) return; } catch(e){}
        var ll;
        try { ll = layer.getLatLng(); } catch(e){ return; }
        if (!ll) return;
        var title = (layer.options && layer.options.title) ? String(layer.options.title) : '';
        var fac = facByName[title] || null;
        if (!fac) {
          for (var n in facByName){
            var f2 = facByName[n];
            if (Math.abs(ll.lat - f2.lat) + Math.abs(ll.lng - f2.lon) < 0.02){ fac = f2; break; }
          }
        }
        if (!fac) return;
        allMarkerData.push({
          marker: layer, facilityName: fac.name, facilityType: fac.type || '',
          features: fac.features || [], lat: fac.lat, lon: fac.lon
        });
      });
    }

    var REGION_BOUNDS_HAKU;
    function ensureBounds(){
      if (REGION_BOUNDS_HAKU) return;
      if (!window.L) return;
      REGION_BOUNDS_HAKU = {
        kanto:    L.latLngBounds([[34.8,138.0],[37.9,141.3]]),
        hokuriku: L.latLngBounds([[35.0,136.0],[38.9,139.9]]),
        tokai:    L.latLngBounds([[33.8,135.5],[36.6,138.1]])
      };
    }

    var currentArea = 'all', currentType = 'all';

    function facilityInArea(d, area){
      if (area === 'all') return true;
      ensureBounds();
      var b = REGION_BOUNDS_HAKU && REGION_BOUNDS_HAKU[area]; if (!b) return true;
      return b.contains(L.latLng(d.lat, d.lon));
    }

    // 名前ベースの種別上書き（フィルター判定専用）
    var TYPE_OVERRIDE = {
      '埼玉クエスト': 'エアマット'
    };

    function facilityMatchesType(d, type){
      if (type === 'all') return true;
      // 特例: 名前ベースで種別を上書き
      var overridden = TYPE_OVERRIDE[d.facilityName];
      if (overridden) {
        return overridden === type;
      }
      if (d.facilityType && d.facilityType.indexOf(type) !== -1) return true;
      if (d.features && d.features.length > 0){
        for (var i = 0; i < d.features.length; i++){
          if (d.features[i] === type) return true;
        }
      }
      return false;
    }

    function updateCount(){
      var el = document.getElementById('haku-facility-count');
      if (el) el.innerHTML = '<strong>12</strong> 施設';
    }

    function applyFilters(){
      var mapInst = getMap();
      if (!mapInst || allMarkerData.length === 0) return;
      var visibleCount = 0;
      for (var i = 0; i < allMarkerData.length; i++){
        var d = allMarkerData[i];
        var show = facilityInArea(d, currentArea) && facilityMatchesType(d, currentType);
        if (show){ visibleCount++; if (!mapInst.hasLayer(d.marker)) d.marker.addTo(mapInst); }
        else { if (mapInst.hasLayer(d.marker)) mapInst.removeLayer(d.marker); }
      }
      updateCount(visibleCount);
    }

    function bindUI(){
      var areaTabs = document.getElementById('haku-area-tabs');
      if (areaTabs) areaTabs.addEventListener('click', function(e){
        var btn = e.target.closest('.haku-area-tab'); if (!btn) return;
        areaTabs.querySelectorAll('.haku-area-tab').forEach(function(b){ b.classList.remove('active'); });
        btn.classList.add('active');
        currentArea = btn.getAttribute('data-area') || 'all';
        applyFilters();
        var mapInst = getMap();
        ensureBounds();
        if (mapInst){
          if (currentArea === 'all'){ try { mapInst.setView([36.2048, 138.2529], 5, { animate: true }); } catch(e){} }
          else { var b = REGION_BOUNDS_HAKU && REGION_BOUNDS_HAKU[currentArea]; if (b) try { mapInst.fitBounds(b, { animate: true, padding: [20,20] }); } catch(e){} }
        }
      });

      var typeChips = document.getElementById('haku-type-chips');
      if (typeChips) typeChips.addEventListener('click', function(e){
        var btn = e.target.closest('.haku-type-chip'); if (!btn) return;
        typeChips.querySelectorAll('.haku-type-chip').forEach(function(b){ b.classList.remove('active'); });
        btn.classList.add('active');
        currentType = btn.getAttribute('data-type') || 'all';
        applyFilters();
      });

      var viewTabs = document.querySelectorAll('.haku-header-tab');
      var listPlaceholder = document.getElementById('haku-list-placeholder');
      var mapEl = document.getElementById('map');
      var filterBar = document.querySelector('.haku-filter-bar');
      viewTabs.forEach(function(tab){
        tab.addEventListener('click', function(){
          viewTabs.forEach(function(t){ t.classList.remove('active'); });
          tab.classList.add('active');
          var view = tab.getAttribute('data-view');
          if (view === 'list'){
            if (mapEl) mapEl.style.visibility = 'hidden';
            if (filterBar) filterBar.style.visibility = 'hidden';
            if (listPlaceholder) listPlaceholder.classList.add('show');
          } else {
            if (mapEl) mapEl.style.visibility = '';
            if (filterBar) filterBar.style.visibility = '';
            if (listPlaceholder) listPlaceholder.classList.remove('show');
            var m = getMap(); if (m) setTimeout(function(){ m.invalidateSize(); }, 100);
          }
        });
      });
    }

    function init(){
      bindUI();
      // Also set initial count from facilities array
      try {
        var facsList = [];
        try { if (typeof facs !== 'undefined' && Array.isArray(facs)) facsList = facs; } catch(e){}
        if (!facsList.length) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facsList = facilities; } catch(e){} }
        if (!facsList.length) { try { if (Array.isArray(window.facilities)) facsList = window.facilities; } catch(e){} }
        if (facsList.length) updateCount(facsList.length);
      } catch(e){}
      collectMarkers();
      if (allMarkerData.length > 0){
        updateCount(allMarkerData.length);
      } else {
        var tries = 0;
        var iv = setInterval(function(){
          collectMarkers();
          if (allMarkerData.length > 0){
            updateCount(allMarkerData.length);
            clearInterval(iv);
          }
          if (++tries > 30) clearInterval(iv);
        }, 500);
      }
    }

    // Wait for everything to load before collecting markers
    if (document.readyState === 'complete'){
      setTimeout(init, 500);
    } else {
      window.addEventListener('load', function(){ setTimeout(init, 500); });
    }
  })();
  </script>
  <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js">
  </script>
  <script src="https://cdn.jsdelivr.net/npm/leaflet-boundary-canvas@1.0.0/src/BoundaryCanvas.js"></script>
  <script src="assets/prefectures.min.js"></script>
  <script src="assets/labels.pref.min.js"></script>
  <script>
// === Added: アイテム種別マッピング (Method A) ===
const ITEM_OF = {
  "ウォータージャンプ S-AIR": ["ウォータージャンプ","ジブ","グラトリ"],
  "小布施クエスト": ["エアバッグ","ジブ"],
  "埼玉クエスト": ["エアバッグ","ジブ"],
  "YAMAZEN AICHI QUEST": ["エアバッグ","ジブ"],
  "THE KINGS 札幌": ["エアマット","ジブ"],
  "SLAB OUTDOORPARK TATEYAMA": ["エアマット","ジブ"],
  "ISLET": ["エアマット","ジブ"],
  "Nico Emi Park": ["エアマット","ジブ"],
  "白馬さのさかWJ": ["ウォータージャンプ"],
  "長野BRUSH?": ["ジブ"],
  "埼玉BRUSH?": ["ジブ"],
  "湘南BRUSH?": ["ジブ"],
  "千葉さくらBRUSH?": ["ジブ"],
  "ウォータージャンプ K-air": ["ウォータージャンプ","ジブ"],
  "FOUR SNOW TOKAI": ["エアマット","ジブ"],
  "THE KINGS 千葉": ["エアマット","ジブ"]
};


// === Icons for features (defined later) ===


</script>
  <script>
    const facilities = [{"name": "ウォータージャンプ S-AIR", "type": "ウォータージャンプ", "pref_city": "埼玉県 所沢市（西武園）", "lat": 35.768749, "lon": 139.445246, "icon_data_uri": "data:image/png;base64,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", "parking": "有料（西武園P）"}, {"name": "小布施クエスト", "type": "エアバッグ", "pref_city": "長野県 小布施町", "lat": 36.689465, "lon": 138.328621, "icon_data_uri": "data:image/png;base64,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", "parking": "あり"}, {"name": "埼玉クエスト", "type": "エアバッグ", "pref_city": "埼玉県 嵐山町", "lat": 36.102515, "lon": 139.292092, "icon_data_uri": "data:image/png;base64,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", "parking": "無料"}, {"name": "YAMAZEN AICHI QUEST", "type": "エアマット", "pref_city": "愛知県 春日井市", "lat": 35.247, "lon": 136.972, "icon_data_uri": "data:image/png;base64,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", "parking": "あり"}, {"name": "SLAB OUTDOORPARK TATEYAMA", "type": "エアマット", "pref_city": "富山県 立山町", "lat": 36.578, "lon": 137.37, "icon_data_uri": "data:image/png;base64,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", "parking": "無料"}, {"name": "ISLET", "type": "エアマット", "pref_city": "群馬県 片品村", "lat": 36.788, "lon": 139.205, "icon_data_uri": "data:image/png;base64,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", "parking": "不明"}, {"name": "Nico Emi Park", "type": "エアマット（屋内外複合）", "pref_city": "東京都 瑞穂町", "lat": 35.790648, "lon": 139.333978, "icon_data_uri": "data:image/png;base64,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", "parking": "専用Pあり"}, {"name": "白馬さのさかWJ", "type": "ウォータージャンプ", "pref_city": "長野県 白馬村（さのさか）", "lat": 36.655, "lon": 137.861, "icon_data_uri": "data:image/png;base64,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", "parking": "あり"}, {"name": "長野BRUSH?", "type": "ブラシ（ジブ特化）", "pref_city": "長野県 小布施町", "lat": 36.689464, "lon": 138.328621, "icon_data_uri": "data:image/png;base64,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", "parking": "（記載なし）"}, {"name": "埼玉BRUSH?", "type": "ブラシ（ジブ＋フリーラン）", "pref_city": "埼玉県 鳩山町", "lat": 35.985716, "lon": 139.367527, "icon_data_uri": "data:image/png;base64,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", "parking": "無料"}, {"name": "湘南BRUSH?", "type": "ブラシ（ジブ＋フリーラン）", "pref_city": "神奈川県 平塚市", "lat": 35.331159, "lon": 139.318399, "icon_data_uri": "data:image/png;base64,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", "parking": "無料（目安30台）"}, {"name": "千葉さくらBRUSH?", "type": "ブラシ（ジブ＋フリー）", "pref_city": "千葉県 佐倉市（LIFE PARK）", "lat": 35.685673, "lon": 140.229363, "icon_data_uri": "data:image/png;base64,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", "parking": "無料"}, {"name": "FOUR SNOW TOKAI", "type": "エアマット", "pref_city": "愛知県 新城市", "lat": 34.9, "lon": 137.5, "icon_data_uri": "data:image/png;base64,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", "parking": "あり"}, {"name": "THE KINGS 千葉", "type": "エアマット", "pref_city": "千葉県 市原市", "lat": 35.434944, "lon": 140.098686, "icon_data_uri": "data:image/png;base64,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", "parking": "無料（地図情報）"}];
    // GeoJSON is loaded from local assets/prefectures.min.geojson (see map init below)

    function colors(t) {
      if (!t) return { fill:"#ef4444", stroke:"#7a0f0f", dot:"#7a0f0f" };
      if (t.includes("ウォータージャンプ")) return { fill:"#ef4444", stroke:"#7a0f0f", dot:"#7a0f0f" };
      if (t.includes("エア")) return { fill:"#3b82f6", stroke:"#0f3c7a", dot:"#0f3c7a" };
      if (t.includes("ブラシ")) return { fill:"#10b981", stroke:"#0a5a48", dot:"#0a5a48" };
      return { fill:"#ef4444", stroke:"#7a0f0f", dot:"#7a0f0f" };
    }

    function pinBody(fill, stroke) {
      return `<svg width="32" height="48" viewBox="0 0 24 36" xmlns="http://www.w3.org/2000/svg">
        <path d="M12 1 C6.48 1 2 5.48 2 11 c0 8 10 24 10 24 s10-16 10-24 C22 5.48 17.52 1 12 1 z"
              fill="${fill}" stroke="${stroke}" stroke-width="1.2"/>
      </svg>`;
    }

    function markerHTML(f) {
      const c = colors(f.type);
      const pin = pinBody(c.fill, c.stroke);
      const innerStyle = f.icon_data_uri && f.icon_data_uri.length > 0
        ? `background-image:url('${f.icon_data_uri}');`
        : `background:${c.dot};`;
      // Inner logo 2x scaling; centered at (16,16) with circular clip
      const inner = `<div style="position:absolute; left:16px; top:16px; transform:translate(-50%,-50%) scale(2);
                               width:20px; height:20px; border-radius:50%; overflow:hidden;
                               __BG__ background-size:cover; background-position:center;
                               border:2px solid #fff; box-shadow:0 0 0 1px rgba(0,0,0,.25);"></div>`
                     .replace("__BG__", innerStyle);
      return `<div style="position:relative;width:32px;height:48px">
                <div style="position:absolute; left:50%; top:46px; transform:translateX(-50%);
                            width:22px; height:6px; background:rgba(0,0,0,0.35); border-radius:50%;
                            filter:blur(2px);"></div>
                ${pin}${inner}
              </div>`;
    }

    const map = L.map('map', { zoomControl:false, attributionControl:false, maxBoundsViscosity: 0.8 });
    const BOUNDS_PAD = 0.12; // 余白をさらに小さく
    // 初期値として日本近辺の広域バウンダリを設定（後で施設群の実Boundsが分かれば置き換え）
    try {
      var DEFAULT_BOUNDS = L.latLngBounds([ [20.0, 120.0], [48.5, 150.5] ]);
      map.setMaxBounds(DEFAULT_BOUNDS);
      map.setMinZoom(0);
    } catch(e) {}

    // ===== BASEMAP: Esri World Hillshade clipped to land (海=背景色, 陸=白系陰影) =====
    map.eachLayer(function(layer) { try { map.removeLayer(layer); } catch(e) {} });
    var _landBoundary = window.PREF_BORDERS_GEOJSON;
    if (_landBoundary && L.TileLayer.BoundaryCanvas) {
      L.TileLayer.boundaryCanvas('https://server.arcgisonline.com/ArcGIS/rest/services/Elevation/World_Hillshade/MapServer/tile/{z}/{y}/{x}', {
        attribution: 'Tiles &copy; Esri',
        boundary: _landBoundary,
        maxZoom: 16,
        className: 'relief-tiles',
        updateWhenIdle: true,
        keepBuffer: 2,
        crossOrigin: true
      }).addTo(map);
    } else {
      L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Elevation/World_Hillshade/MapServer/tile/{z}/{y}/{x}', {
        attribution: 'Tiles &copy; Esri',
        maxZoom: 16,
        className: 'relief-tiles',
        updateWhenIdle: true,
        keepBuffer: 2,
        crossOrigin: true
      }).addTo(map);
    }

    // ===== Japanese prefecture labels (GeoJSON points, no tiles) =====
    map.createPane('labelPane');
    map.getPane('labelPane').style.zIndex = 310;
    if (window.PREF_LABELS) {
      L.geoJSON(window.PREF_LABELS, {
        pane: 'labelPane',
        interactive: false,
        pointToLayer: function(feature, latlng) {
          return L.marker(latlng, {
            pane: 'labelPane',
            interactive: false,
            icon: L.divIcon({ className: 'map-label', html: feature.properties.name, iconSize: [0, 0] })
          });
        }
      }).addTo(map);
    }
    map.on('zoomend', function() {
      var z = map.getZoom(), s = z >= 8 ? '12px' : '11px';
      document.querySelectorAll('.map-label').forEach(function(el) { el.style.fontSize = s; });
    });

    // ===== Prefecture borders: dashed double-line on dedicated pane =====
    map.createPane('prefBorderPane');
    map.getPane('prefBorderPane').style.zIndex = 350;
    map.options.preferCanvas = false;
    var _prefData = window.PREF_BORDERS_GEOJSON;
    if (!_prefData) {
      console.error('prefectures.min.js が読み込めていません: window.PREF_BORDERS_GEOJSON が空です');
    } else {
      L.geoJSON(_prefData, {
        pane: 'prefBorderPane',
        interactive: false,
        style: { color: 'rgba(255,255,255,0.92)', weight: 2.4, opacity: 1.0, fillOpacity: 0 }
      }).addTo(map);
      L.geoJSON(_prefData, {
        pane: 'prefBorderPane',
        interactive: false,
        style: { color: '#4B5563', weight: 1.2, opacity: 0.9, dashArray: '5 5', lineCap: 'round', fillOpacity: 0 }
      }).addTo(map);
    }

    if (window.LITE_BOOT) {
      try { 
        map.setView([36.2048, 138.2529], 5); 
        try {
          var JAPAN_BOUNDS = L.latLngBounds([ [24.0, 122.0], [46.5, 149.0] ]);
          map.setMaxBounds(JAPAN_BOUNDS);
        } catch(e) {}
      } catch(_) {}
    } else {
      const group = L.featureGroup().addTo(map);
      facilities.forEach(f => {
        // 指定2施設（YAMAZEN Aichi Quest / FOUR SNOW TOKAI）はベースピン自体を描画しない
        try {
          if (isYamazenaichiQuestName(f.name) || isFourSnowTokaiName(f.name)) return;
        } catch(_){}
        const icon = L.divIcon({ html: markerHTML(f), className:"", iconSize:[32,48], iconAnchor:[16,46], popupAnchor:[0,-36] });
        const bm = L.marker([f.lat, f.lon], { icon, title: f.name }).addTo(group);
        bm.bindPopup(`<strong>${f.name}</strong><br/>${f.type}<br/>${f.pref_city}<br/>🚗 駐車: (駐車情報)`, { autoPanPaddingTopLeft: L.point(20, 320), autoPanPaddingBottomRight: L.point(20, 20) });
      });
      // 念のため、対象2施設のベースピンが残っていれば強制的に削除
      try {
        group.eachLayer(function(l){
          try{
            var nm = l && l.options && l.options.title ? String(l.options.title) : '';
            if (nm && (isYamazenaichiQuestName(nm) || isFourSnowTokaiName(nm))) {
              if (group.removeLayer) group.removeLayer(l);
              if (l.remove) l.remove();
            }
          }catch(_){}
        });
      } catch(_){}
      var gb = group.getBounds();
      map.fitBounds(gb.pad(0.2));
      // 施設全体の外枠＋余白 と 日本広域の和集合を上限に設定（狭くなりすぎないように）
      try { 
        var limit = gb.pad(BOUNDS_PAD);
        try {
          if (typeof DEFAULT_BOUNDS !== 'undefined' && DEFAULT_BOUNDS) {
            limit = limit.extend(DEFAULT_BOUNDS.getSouthWest()).extend(DEFAULT_BOUNDS.getNorthEast());
          }
        } catch(_) {}
        map.setMaxBounds(limit); 
      } catch(e) {}
    }
  </script>
  <script>
  // Region zoom buttons → fit to predefined bounds
  (function(){
    try{
      var Lref = window.L; if (!Lref) return;
      var REGION_BOUNDS = {
        kanto: Lref.latLngBounds([ [34.8, 138.0], [37.9, 141.3] ]),
        hokuriku: Lref.latLngBounds([ [35.0, 136.0], [38.9, 139.9] ]),
        tokai: Lref.latLngBounds([ [33.8, 135.5], [36.6, 138.1] ])
      };
      var REGION_VIEW = {
        kanto: { center: Lref.latLng(35.7, 139.7), zoom: 8 },
        hokuriku: { center: Lref.latLng(37.0, 137.5), zoom: 7 },
        tokai: { center: Lref.latLng(35.1, 137.0), zoom: 8 }
      };
      function getMap(){
        if (window.map && window.map instanceof Lref.Map) return window.map;
        for (var k in window){ if (window[k] && window[k] instanceof Lref.Map) return window[k]; }
        return null;
      }
      function attach(){
        var map = getMap();
        var rz = document.getElementById('region-zoom');
        if (!map || !rz) return false;
        rz.addEventListener('click', function(ev){
          var btn = ev.target.closest('.rz-btn'); if (!btn) return;
          var key = btn.getAttribute('data-region');
          var view = REGION_VIEW[key];
          if (view && typeof map.setView === 'function') {
            try { 
              map.setView(view.center, view.zoom, { animate:true }); 
            }
            catch(e){}
          } else {
            var b = REGION_BOUNDS[key];
            if (b) { 
              try { 
                map.fitBounds(b, { animate:true, padding:[20,20] }); 
              } catch(e) {} 
            }
          }
        });
        return true;
      }
      if (!attach()){
        var tries = 0; var iv = setInterval(function(){ if (attach() || ++tries>20) clearInterval(iv); }, 200);
      }
    }catch(e){}
  })();
  </script>
  <!-- Tile-swap script removed: Carto Positron no-labels is set as the sole base tile in the map init above -->

  <script>
  // --- Make initial extent a bit more zoomed-out, and use it as the new min zoom ---
  (function(){
    try {
      var Lref = window.L; if (!Lref) return;
      // helper to obtain the Leaflet map instance
      function getMap(){
        if (window.map && window.map instanceof Lref.Map) return window.map;
        for (var k in window){ if (window[k] && window[k] instanceof Lref.Map) return window[k]; }
        return null;
      }
      var _map = getMap(); if (!_map) return;
      function apply(){
        try {
          var cur = _map.getZoom();
          var target = Math.max(0, cur - 1); // 1段階ズームアウト
          // 下限とロックを更新
          if (typeof _map.setMinZoom === 'function') _map.setMinZoom(target);
          window.__LOCK_MIN_ZOOM = target;
          // 表示をズームアウト
          _map.setZoom(target);
        } catch(e) {}
      }
      if (_map._loaded) setTimeout(apply, 400); else _map.once('load', function(){ setTimeout(apply, 400); });
    } catch(e) {}
  })();
  </script>

  <script>
  // --- Enforce global min-zoom based on first setView (works for any Leaflet map on page) ---
  (function(){
    try {
      var Lref = window.L; if (!Lref || !Lref.Map) return;
      if (window.__zoomPatchApplied) return; window.__zoomPatchApplied = true;

      var LOCK_KEY = '__LOCK_MIN_ZOOM';
      function getLock(){ return window[LOCK_KEY]; }
      function setLock(v){ window[LOCK_KEY] = v; }

      // Capture the very first setView zoom as baseline, then lock to (baseline + 1)
      var origSetView = Lref.Map.prototype.setView;
      Lref.Map.prototype.setView = function(center, zoom, options){
        if (typeof zoom === 'number' && getLock() == null){
          // 初期表示はそのまま、以降のズームアウトのみ禁止
          var minZ = Math.ceil(zoom);
          setLock(minZ);
          try { if (typeof this.setMinZoom === 'function') this.setMinZoom(minZ); } catch(e) {}
        }
        return origSetView.call(this, center, zoom, options);
      };

      // Clamp zooming at runtime
      var origSetZoom = Lref.Map.prototype.setZoom;
      Lref.Map.prototype.setZoom = function(zoom, options){
        var minZ = getLock();
        if (typeof minZ === 'number' && typeof zoom === 'number' && zoom < minZ) zoom = minZ;
        return origSetZoom.call(this, zoom, options);
      };

      // fitBounds → getBoundsZoom を下限で丸め
      var origGetBoundsZoom = Lref.Map.prototype.getBoundsZoom;
      if (origGetBoundsZoom){
        Lref.Map.prototype.getBoundsZoom = function(bounds, inside, padding){
          var z = origGetBoundsZoom.call(this, bounds, inside, padding);
          var minZ = getLock();
          if (typeof minZ === 'number' && z < minZ) return minZ;
          return z;
        };
      }
    } catch(e) {}
  })();
  </script>

  <script id="openCalendar" type="application/json">{"小布施クエスト": {"2025-01-01": [{"open": "16:00", "close": "21:00"}], "2025-01-02": [{"open": "16:00", "close": "21:00"}], "2025-01-03": [{"open": "16:00", "close": "21:00"}], "2025-01-04": [{"open": "16:00", "close": "21:00"}], "2025-01-07": [{"open": "16:00", "close": "21:00"}], "2025-01-08": [{"open": "16:00", "close": "21:00"}], "2025-01-09": [{"open": "16:00", "close": "21:00"}], "2025-01-10": [{"open": "16:00", "close": "21:00"}], "2025-01-11": [{"open": "16:00", "close": "21:00"}], "2025-01-14": [{"open": "16:00", "close": "21:00"}], "2025-01-15": [{"open": "16:00", "close": "21:00"}], "2025-01-16": [{"open": "16:00", "close": "21:00"}], "2025-01-17": [{"open": "16:00", "close": "21:00"}], "2025-01-18": [{"open": "16:00", "close": "21:00"}], "2025-01-21": [{"open": "16:00", "close": "21:00"}], "2025-01-22": [{"open": "16:00", "close": "21:00"}], "2025-01-23": [{"open": "16:00", "close": "21:00"}], "2025-01-24": [{"open": "16:00", "close": "21:00"}], "2025-01-25": [{"open": "16:00", "close": "21:00"}], "2025-01-28": [{"open": "16:00", "close": "21:00"}], "2025-01-29": [{"open": "16:00", "close": "21:00"}], "2025-01-30": [{"open": "16:00", "close": "21:00"}], "2025-01-31": [{"open": "16:00", "close": "21:00"}], "2025-02-01": [{"open": "16:00", "close": "21:00"}], "2025-02-04": [{"open": "16:00", "close": "21:00"}], "2025-02-05": [{"open": "16:00", "close": "21:00"}], "2025-02-06": [{"open": "16:00", "close": "21:00"}], "2025-02-07": [{"open": "16:00", "close": "21:00"}], "2025-02-08": [{"open": "16:00", "close": "21:00"}], "2025-02-11": [{"open": "16:00", "close": "21:00"}], "2025-02-12": [{"open": "16:00", "close": "21:00"}], "2025-02-13": [{"open": "16:00", "close": "21:00"}], "2025-02-14": [{"open": "16:00", "close": "21:00"}], "2025-02-15": [{"open": "16:00", "close": "21:00"}], "2025-02-18": [{"open": "16:00", "close": "21:00"}], "2025-02-19": [{"open": "16:00", "close": "21:00"}], "2025-02-20": [{"open": "16:00", "close": "21:00"}], "2025-02-21": [{"open": "16:00", "close": "21:00"}], "2025-02-22": [{"open": "16:00", "close": "21:00"}], "2025-02-25": [{"open": "16:00", "close": "21:00"}], "2025-02-26": [{"open": "16:00", "close": "21:00"}], "2025-02-27": [{"open": "16:00", "close": "21:00"}], "2025-02-28": [{"open": "16:00", "close": "21:00"}], "2025-03-01": [{"open": "16:00", "close": "21:00"}], "2025-03-04": [{"open": "16:00", "close": "21:00"}], "2025-03-05": [{"open": "16:00", "close": "21:00"}], "2025-03-06": [{"open": "16:00", "close": "21:00"}], "2025-03-07": [{"open": "16:00", "close": "21:00"}], "2025-03-08": [{"open": "16:00", "close": "21:00"}], "2025-03-11": [{"open": "16:00", "close": "21:00"}], "2025-03-12": [{"open": "16:00", "close": "21:00"}], "2025-03-13": [{"open": "16:00", "close": "21:00"}], "2025-03-14": [{"open": "16:00", "close": "21:00"}], "2025-03-15": [{"open": "16:00", "close": "21:00"}], "2025-03-18": [{"open": "16:00", "close": "21:00"}], "2025-03-19": [{"open": "16:00", "close": "21:00"}], "2025-03-20": [{"open": "16:00", "close": "21:00"}], "2025-03-21": [{"open": "16:00", "close": "21:00"}], "2025-03-22": [{"open": "16:00", "close": "21:00"}], "2025-03-25": [{"open": "16:00", "close": "21:00"}], "2025-03-26": [{"open": "16:00", "close": "21:00"}], "2025-03-27": [{"open": "16:00", "close": "21:00"}], "2025-03-28": [{"open": "16:00", "close": "21:00"}], "2025-03-29": [{"open": "16:00", "close": "21:00"}], "2025-04-01": [{"open": "13:30", "close": "22:00"}], "2025-04-02": [{"open": "13:30", "close": "22:00"}], "2025-04-03": [{"open": "13:30", "close": "22:00"}], "2025-04-04": [{"open": "13:30", "close": "22:00"}], "2025-04-05": [{"open": "13:30", "close": "22:00"}], "2025-04-06": [{"open": "11:30", "close": "20:00"}], "2025-04-07": [{"open": "13:30", "close": "22:00"}], "2025-04-08": [{"open": "13:30", "close": "22:00"}], "2025-04-09": [{"open": "13:30", "close": "22:00"}], "2025-04-10": [{"open": "13:30", "close": "22:00"}], "2025-04-11": [{"open": "13:30", "close": "22:00"}], "2025-04-12": [{"open": "13:30", "close": "22:00"}], "2025-04-13": [{"open": "11:30", "close": "20:00"}], "2025-04-14": [{"open": "13:30", "close": "22:00"}], "2025-04-15": [{"open": "13:30", "close": "22:00"}], "2025-04-16": [{"open": "13:30", "close": "22:00"}], "2025-04-17": [{"open": "13:30", "close": "22:00"}], "2025-04-18": [{"open": "13:30", "close": "22:00"}], "2025-04-19": [{"open": "13:30", "close": "22:00"}], "2025-04-20": [{"open": "11:30", "close": "20:00"}], "2025-04-21": [{"open": "13:30", "close": "22:00"}], "2025-04-22": [{"open": "13:30", "close": "22:00"}], "2025-04-23": [{"open": "13:30", "close": "22:00"}], "2025-04-24": [{"open": "13:30", "close": "22:00"}], "2025-04-25": [{"open": "13:30", "close": "22:00"}], "2025-04-26": [{"open": "13:30", "close": "22:00"}], "2025-04-27": [{"open": "11:30", "close": "20:00"}], "2025-04-28": [{"open": "13:30", "close": "22:00"}], "2025-04-29": [{"open": "11:30", "close": "20:00"}], "2025-04-30": [{"open": "13:30", "close": "22:00"}], "2025-05-01": [{"open": "13:30", "close": "22:00"}], "2025-05-02": [{"open": "13:30", "close": "22:00"}], "2025-05-03": [{"open": "11:30", "close": "20:00"}], "2025-05-04": [{"open": "11:30", "close": "20:00"}], "2025-05-05": [{"open": "11:30", "close": "20:00"}], "2025-05-06": [{"open": "11:30", "close": "20:00"}], "2025-05-07": [{"open": "13:30", "close": "22:00"}], "2025-05-08": [{"open": "13:30", "close": "22:00"}], "2025-05-09": [{"open": "13:30", "close": "22:00"}], "2025-05-10": [{"open": "13:30", "close": "22:00"}], "2025-05-11": [{"open": "11:30", "close": "20:00"}], "2025-05-12": [{"open": "13:30", "close": "22:00"}], "2025-05-13": [{"open": "13:30", "close": "22:00"}], "2025-05-14": [{"open": "13:30", "close": "22:00"}], "2025-05-15": [{"open": "13:30", "close": "22:00"}], "2025-05-16": [{"open": "13:30", "close": "22:00"}], "2025-05-17": [{"open": "13:30", "close": "22:00"}], "2025-05-18": [{"open": "11:30", "close": "20:00"}], "2025-05-19": [{"open": "13:30", "close": "22:00"}], "2025-05-20": [{"open": "13:30", "close": "22:00"}], "2025-05-21": [{"open": "13:30", "close": "22:00"}], "2025-05-22": [{"open": "13:30", "close": "22:00"}], "2025-05-23": [{"open": "13:30", "close": "22:00"}], "2025-05-24": [{"open": "13:30", "close": "22:00"}], "2025-05-25": [{"open": "11:30", "close": "20:00"}], "2025-05-26": [{"open": "13:30", "close": "22:00"}], "2025-05-27": [{"open": "13:30", "close": "22:00"}], "2025-05-28": [{"open": "13:30", "close": "22:00"}], "2025-05-29": [{"open": "13:30", "close": "22:00"}], "2025-05-30": [{"open": "13:30", "close": "22:00"}], "2025-05-31": [{"open": "13:30", "close": "22:00"}], "2025-06-01": [{"open": "11:30", "close": "20:00"}], "2025-06-02": [{"open": "13:30", "close": "22:00"}], "2025-06-03": [{"open": "13:30", "close": "22:00"}], "2025-06-04": [{"open": "13:30", "close": "22:00"}], "2025-06-05": [{"open": "13:30", "close": "22:00"}], "2025-06-06": [{"open": "13:30", "close": "22:00"}], "2025-06-07": [{"open": "13:30", "close": "22:00"}], "2025-06-08": [{"open": "11:30", "close": "20:00"}], "2025-06-09": [{"open": "13:30", "close": "22:00"}], "2025-06-10": [{"open": "13:30", "close": "22:00"}], "2025-06-11": [{"open": "13:30", "close": "22:00"}], "2025-06-12": [{"open": "13:30", "close": "22:00"}], "2025-06-13": [{"open": "13:30", "close": "22:00"}], "2025-06-14": [{"open": "13:30", "close": "22:00"}], "2025-06-15": [{"open": "11:30", "close": "20:00"}], "2025-06-16": [{"open": "13:30", "close": "22:00"}], "2025-06-17": [{"open": "13:30", "close": "22:00"}], "2025-06-18": [{"open": "13:30", "close": "22:00"}], "2025-06-19": [{"open": "13:30", "close": "22:00"}], "2025-06-20": [{"open": "13:30", "close": "22:00"}], "2025-06-21": [{"open": "13:30", "close": "22:00"}], "2025-06-22": [{"open": "11:30", "close": "20:00"}], "2025-06-23": [{"open": "13:30", "close": "22:00"}], "2025-06-24": [{"open": "13:30", "close": "22:00"}], "2025-06-25": [{"open": "13:30", "close": "22:00"}], "2025-06-26": [{"open": "13:30", "close": "22:00"}], "2025-06-27": [{"open": "13:30", "close": "22:00"}], "2025-06-28": [{"open": "13:30", "close": "22:00"}], "2025-06-29": [{"open": "11:30", "close": "20:00"}], "2025-06-30": [{"open": "13:30", "close": "22:00"}], "2025-07-01": [{"open": "13:30", "close": "22:00"}], "2025-07-02": [{"open": "13:30", "close": "22:00"}], "2025-07-03": [{"open": "13:30", "close": "22:00"}], "2025-07-04": [{"open": "13:30", "close": "22:00"}], "2025-07-05": [{"open": "13:30", "close": "22:00"}], "2025-07-06": [{"open": "11:30", "close": "20:00"}], "2025-07-07": [{"open": "13:30", "close": "22:00"}], "2025-07-08": [{"open": "13:30", "close": "22:00"}], "2025-07-09": [{"open": "13:30", "close": "22:00"}], "2025-07-10": [{"open": "13:30", "close": "22:00"}], "2025-07-11": [{"open": "13:30", "close": "22:00"}], "2025-07-12": [{"open": "13:30", "close": "22:00"}], "2025-07-13": [{"open": "11:30", "close": "20:00"}], "2025-07-14": [{"open": "13:30", "close": "22:00"}], "2025-07-15": [{"open": "13:30", "close": "22:00"}], "2025-07-16": [{"open": "13:30", "close": "22:00"}], "2025-07-17": [{"open": "13:30", "close": "22:00"}], "2025-07-18": [{"open": "13:30", "close": "22:00"}], "2025-07-19": [{"open": "13:30", "close": "22:00"}], "2025-07-20": [{"open": "11:30", "close": "20:00"}], "2025-07-21": [{"open": "11:30", "close": "20:00"}], "2025-07-22": [{"open": "13:30", "close": "22:00"}], "2025-07-23": [{"open": "13:30", "close": "22:00"}], "2025-07-24": [{"open": "13:30", "close": "22:00"}], "2025-07-25": [{"open": "13:30", "close": "22:00"}], "2025-07-26": [{"open": "13:30", "close": "22:00"}], "2025-07-27": [{"open": "11:30", "close": "20:00"}], "2025-07-28": [{"open": "13:30", "close": "22:00"}], "2025-07-29": [{"open": "13:30", "close": "22:00"}], "2025-07-30": [{"open": "13:30", "close": "22:00"}], "2025-07-31": [{"open": "13:30", "close": "22:00"}], "2025-08-01": [{"open": "13:30", "close": "22:00"}], "2025-08-02": [{"open": "13:30", "close": "22:00"}], "2025-08-03": [{"open": "11:30", "close": "20:00"}], "2025-08-04": [{"open": "13:30", "close": "22:00"}], "2025-08-05": [{"open": "13:30", "close": "22:00"}], "2025-08-06": [{"open": "13:30", "close": "22:00"}], "2025-08-07": [{"open": "13:30", "close": "22:00"}], "2025-08-08": [{"open": "13:30", "close": "22:00"}], "2025-08-09": [{"open": "13:30", "close": "22:00"}], "2025-08-10": [{"open": "11:30", "close": "20:00"}], "2025-08-11": [{"open": "11:30", "close": "20:00"}], "2025-08-12": [{"open": "13:30", "close": "22:00"}], "2025-08-13": [{"open": "13:30", "close": "22:00"}], "2025-08-14": [{"open": "13:30", "close": "22:00"}], "2025-08-15": [{"open": "13:30", "close": "22:00"}], "2025-08-16": [{"open": "13:30", "close": "22:00"}], "2025-08-17": [{"open": "11:30", "close": "20:00"}], "2025-08-18": [{"open": "13:30", "close": "22:00"}], "2025-08-19": [{"open": "13:30", "close": "22:00"}], "2025-08-20": [{"open": "13:30", "close": "22:00"}], "2025-08-21": [{"open": "13:30", "close": "22:00"}], "2025-08-22": [{"open": "13:30", "close": "22:00"}], "2025-08-23": [{"open": "13:30", "close": "22:00"}], "2025-08-24": [{"open": "11:30", "close": "20:00"}], "2025-08-25": [{"open": "13:30", "close": "22:00"}], "2025-08-26": [{"open": "13:30", "close": "22:00"}], "2025-08-27": [{"open": "13:30", "close": "22:00"}], "2025-08-28": [{"open": "13:30", "close": "22:00"}], "2025-08-29": [{"open": "13:30", "close": "22:00"}], "2025-08-30": [{"open": "13:30", "close": "22:00"}], "2025-08-31": [{"open": "11:30", "close": "20:00"}], "2025-09-01": [{"open": "13:30", "close": "22:00"}], "2025-09-02": [{"open": "13:30", "close": "22:00"}], "2025-09-03": [{"open": "13:30", "close": "22:00"}], "2025-09-04": [{"open": "13:30", "close": "22:00"}], "2025-09-05": [{"open": "13:30", "close": "22:00"}], "2025-09-06": [{"open": "13:30", "close": "22:00"}], "2025-09-07": [{"open": "11:30", "close": "20:00"}], "2025-09-08": [{"open": "13:30", "close": "22:00"}], "2025-09-09": [{"open": "13:30", "close": "22:00"}], "2025-09-10": [{"open": "13:30", "close": "22:00"}], "2025-09-11": [{"open": "13:30", "close": "22:00"}], "2025-09-12": [{"open": "13:30", "close": "22:00"}], "2025-09-13": [{"open": "13:30", "close": "22:00"}], "2025-09-14": [{"open": "11:30", "close": "20:00"}], "2025-09-15": [{"open": "11:30", "close": "20:00"}], "2025-09-16": [{"open": "13:30", "close": "22:00"}], "2025-09-17": [{"open": "13:30", "close": "22:00"}], "2025-09-18": [{"open": "13:30", "close": "22:00"}], "2025-09-19": [{"open": "13:30", "close": "22:00"}], "2025-09-20": [{"open": "13:30", "close": "22:00"}], "2025-09-21": [{"open": "11:30", "close": "20:00"}], "2025-09-22": [{"open": "13:30", "close": "22:00"}], "2025-09-23": [{"open": "11:30", "close": "20:00"}], "2025-09-24": [{"open": "13:30", "close": "22:00"}], "2025-09-25": [{"open": "13:30", "close": "22:00"}], "2025-09-26": [{"open": "13:30", "close": "22:00"}], "2025-09-27": [{"open": "13:30", "close": "22:00"}], "2025-09-28": [{"open": "11:30", "close": "20:00"}], "2025-09-29": [{"open": "13:30", "close": "22:00"}], "2025-09-30": [{"open": "13:30", "close": "22:00"}], "2025-10-01": [{"open": "13:30", "close": "22:00"}], "2025-10-02": [{"open": "13:30", "close": "22:00"}], "2025-10-03": [{"open": "13:30", "close": "22:00"}], "2025-10-04": [{"open": "13:30", "close": "22:00"}], "2025-10-05": [{"open": "11:30", "close": "20:00"}], "2025-10-06": [{"open": "13:30", "close": "22:00"}], "2025-10-07": [{"open": "13:30", "close": "22:00"}], "2025-10-08": [{"open": "13:30", "close": "22:00"}], "2025-10-09": [{"open": "13:30", "close": "22:00"}], "2025-10-10": [{"open": "13:30", "close": "22:00"}], "2025-10-11": [{"open": "13:30", "close": "22:00"}], "2025-10-12": [{"open": "11:30", "close": "20:00"}], "2025-10-13": [{"open": "11:30", "close": "20:00"}], "2025-10-14": [{"open": "13:30", "close": "22:00"}], "2025-10-15": [{"open": "13:30", "close": "22:00"}], "2025-10-16": [{"open": "13:30", "close": "22:00"}], "2025-10-17": [{"open": "13:30", "close": "22:00"}], "2025-10-18": [{"open": "13:30", "close": "22:00"}], "2025-10-19": [{"open": "11:30", "close": "20:00"}], "2025-10-20": [{"open": "13:30", "close": "22:00"}], "2025-10-21": [{"open": "13:30", "close": "22:00"}], "2025-10-22": [{"open": "13:30", "close": "22:00"}], "2025-10-23": [{"open": "13:30", "close": "22:00"}], "2025-10-24": [{"open": "13:30", "close": "22:00"}], "2025-10-25": [{"open": "13:30", "close": "22:00"}], "2025-10-26": [{"open": "11:30", "close": "20:00"}], "2025-10-27": [{"open": "13:30", "close": "22:00"}], "2025-10-28": [{"open": "13:30", "close": "22:00"}], "2025-10-29": [{"open": "13:30", "close": "22:00"}], "2025-10-30": [{"open": "13:30", "close": "22:00"}], "2025-10-31": [{"open": "13:30", "close": "22:00"}], "2025-11-01": [{"open": "13:30", "close": "22:00"}], "2025-11-02": [{"open": "11:30", "close": "20:00"}], "2025-11-03": [{"open": "11:30", "close": "20:00"}], "2025-11-04": [{"open": "13:30", "close": "22:00"}], "2025-11-05": [{"open": "13:30", "close": "22:00"}], "2025-11-06": [{"open": "13:30", "close": "22:00"}], "2025-11-07": [{"open": "13:30", "close": "22:00"}], "2025-11-08": [{"open": "13:30", "close": "22:00"}], "2025-11-09": [{"open": "11:30", "close": "20:00"}], "2025-11-10": [{"open": "13:30", "close": "22:00"}], "2025-11-11": [{"open": "13:30", "close": "22:00"}], "2025-11-12": [{"open": "13:30", "close": "22:00"}], "2025-11-13": [{"open": "13:30", "close": "22:00"}], "2025-11-14": [{"open": "13:30", "close": "22:00"}], "2025-11-15": [{"open": "13:30", "close": "22:00"}], "2025-11-16": [{"open": "11:30", "close": "20:00"}], "2025-11-17": [{"open": "13:30", "close": "22:00"}], "2025-11-18": [{"open": "13:30", "close": "22:00"}], "2025-11-19": [{"open": "13:30", "close": "22:00"}], "2025-11-20": [{"open": "13:30", "close": "22:00"}], "2025-11-21": [{"open": "13:30", "close": "22:00"}], "2025-11-22": [{"open": "13:30", "close": "22:00"}], "2025-11-23": [{"open": "11:30", "close": "20:00"}], "2025-11-24": [{"open": "11:30", "close": "20:00"}], "2025-11-25": [{"open": "13:30", "close": "22:00"}], "2025-11-26": [{"open": "13:30", "close": "22:00"}], "2025-11-27": [{"open": "13:30", "close": "22:00"}], "2025-11-28": [{"open": "13:30", "close": "22:00"}], "2025-11-29": [{"open": "13:30", "close": "22:00"}], "2025-11-30": [{"open": "11:30", "close": "20:00"}], "2025-12-01": [{"open": "13:30", "close": "22:00"}], "2025-12-02": [{"open": "13:30", "close": "22:00"}], "2025-12-03": [{"open": "13:30", "close": "22:00"}], "2025-12-04": [{"open": "13:30", "close": "22:00"}], "2025-12-05": [{"open": "13:30", "close": "22:00"}], "2025-12-06": [{"open": "13:30", "close": "22:00"}], "2025-12-07": [{"open": "11:30", "close": "20:00"}], "2025-12-08": [{"open": "13:30", "close": "22:00"}], "2025-12-09": [{"open": "13:30", "close": "22:00"}], "2025-12-10": [{"open": "13:30", "close": "22:00"}], "2025-12-11": [{"open": "13:30", "close": "22:00"}], "2025-12-12": [{"open": "13:30", "close": "22:00"}], "2025-12-13": [{"open": "13:30", "close": "22:00"}], "2025-12-14": [{"open": "11:30", "close": "20:00"}], "2025-12-15": [{"open": "13:30", "close": "22:00"}], "2025-12-16": [{"open": "13:30", "close": "22:00"}], "2025-12-17": [{"open": "13:30", "close": "22:00"}], "2025-12-18": [{"open": "13:30", "close": "22:00"}], "2025-12-19": [{"open": "13:30", "close": "22:00"}], "2025-12-20": [{"open": "13:30", "close": "22:00"}], "2025-12-21": [{"open": "11:30", "close": "20:00"}], "2025-12-22": [{"open": "13:30", "close": "22:00"}], "2025-12-23": [{"open": "13:30", "close": "22:00"}], "2025-12-24": [{"open": "13:30", "close": "22:00"}], "2025-12-25": [{"open": "13:30", "close": "22:00"}], "2025-12-26": [{"open": "13:30", "close": "22:00"}], "2025-12-27": [{"open": "13:30", "close": "22:00"}], "2025-12-28": [{"open": "11:30", "close": "20:00"}], "2025-12-29": [{"open": "13:30", "close": "22:00"}], "2025-12-30": [{"open": "13:30", "close": "22:00"}], "2025-12-31": [{"open": "13:30", "close": "22:00"}]}, "YAMAZEN AICHI QUEST": {"2025-01-01": [{"open": "17:00", "close": "22:00"}], "2025-01-02": [{"open": "17:00", "close": "22:00"}], "2025-01-03": [{"open": "17:00", "close": "22:00"}], "2025-01-04": [{"open": "17:00", "close": "22:00"}], "2025-01-07": [{"open": "17:00", "close": "22:00"}], "2025-01-08": [{"open": "17:00", "close": "22:00"}], "2025-01-09": [{"open": "17:00", "close": "22:00"}], "2025-01-10": [{"open": "17:00", "close": "22:00"}], "2025-01-11": [{"open": "17:00", "close": "22:00"}], "2025-01-14": [{"open": "17:00", "close": "22:00"}], "2025-01-15": [{"open": "17:00", "close": "22:00"}], "2025-01-16": [{"open": "17:00", "close": "22:00"}], "2025-01-17": [{"open": "17:00", "close": "22:00"}], "2025-01-18": [{"open": "17:00", "close": "22:00"}], "2025-01-21": [{"open": "17:00", "close": "22:00"}], "2025-01-22": [{"open": "17:00", "close": "22:00"}], "2025-01-23": [{"open": "17:00", "close": "22:00"}], "2025-01-24": [{"open": "17:00", "close": "22:00"}], "2025-01-25": [{"open": "17:00", "close": "22:00"}], "2025-01-28": [{"open": "17:00", "close": "22:00"}], "2025-01-29": [{"open": "17:00", "close": "22:00"}], "2025-01-30": [{"open": "17:00", "close": "22:00"}], "2025-01-31": [{"open": "17:00", "close": "22:00"}], "2025-02-01": [{"open": "17:00", "close": "22:00"}], "2025-02-04": [{"open": "17:00", "close": "22:00"}], "2025-02-05": [{"open": "17:00", "close": "22:00"}], "2025-02-06": [{"open": "17:00", "close": "22:00"}], "2025-02-07": [{"open": "17:00", "close": "22:00"}], "2025-02-08": [{"open": "17:00", "close": "22:00"}], "2025-02-11": [{"open": "17:00", "close": "22:00"}], "2025-02-12": [{"open": "17:00", "close": "22:00"}], "2025-02-13": [{"open": "17:00", "close": "22:00"}], "2025-02-14": [{"open": "17:00", "close": "22:00"}], "2025-02-15": [{"open": "17:00", "close": "22:00"}], "2025-02-18": [{"open": "17:00", "close": "22:00"}], "2025-02-19": [{"open": "17:00", "close": "22:00"}], "2025-02-20": [{"open": "17:00", "close": "22:00"}], "2025-02-21": [{"open": "17:00", "close": "22:00"}], "2025-02-22": [{"open": "17:00", "close": "22:00"}], "2025-02-25": [{"open": "17:00", "close": "22:00"}], "2025-02-26": [{"open": "17:00", "close": "22:00"}], "2025-02-27": [{"open": "17:00", "close": "22:00"}], "2025-02-28": [{"open": "17:00", "close": "22:00"}], "2025-03-01": [{"open": "17:00", "close": "22:00"}], "2025-03-04": [{"open": "17:00", "close": "22:00"}], "2025-03-05": [{"open": "17:00", "close": "22:00"}], "2025-03-06": [{"open": "17:00", "close": "22:00"}], "2025-03-07": [{"open": "17:00", "close": "22:00"}], "2025-03-08": [{"open": "17:00", "close": "22:00"}], "2025-03-11": [{"open": "17:00", "close": "22:00"}], "2025-03-12": [{"open": "17:00", "close": "22:00"}], "2025-03-13": [{"open": "17:00", "close": "22:00"}], "2025-03-14": [{"open": "17:00", "close": "22:00"}], "2025-03-15": [{"open": "17:00", "close": "22:00"}], "2025-03-18": [{"open": "17:00", "close": "22:00"}], "2025-03-19": [{"open": "17:00", "close": "22:00"}], "2025-03-20": [{"open": "17:00", "close": "22:00"}], "2025-03-21": [{"open": "17:00", "close": "22:00"}], "2025-03-22": [{"open": "17:00", "close": "22:00"}], "2025-03-25": [{"open": "17:00", "close": "22:00"}], "2025-03-26": [{"open": "17:00", "close": "22:00"}], "2025-03-27": [{"open": "17:00", "close": "22:00"}], "2025-03-28": [{"open": "17:00", "close": "22:00"}], "2025-03-29": [{"open": "17:00", "close": "22:00"}], "2025-04-01": [{"open": "13:30", "close": "22:00"}], "2025-04-02": [{"open": "13:30", "close": "22:00"}], "2025-04-03": [{"open": "13:30", "close": "22:00"}], "2025-04-04": [{"open": "13:30", "close": "22:00"}], "2025-04-05": [{"open": "13:30", "close": "22:00"}], "2025-04-06": [{"open": "11:30", "close": "20:00"}], "2025-04-07": [{"open": "13:30", "close": "22:00"}], "2025-04-08": [{"open": "13:30", "close": "22:00"}], "2025-04-09": [{"open": "13:30", "close": "22:00"}], "2025-04-10": [{"open": "13:30", "close": "22:00"}], "2025-04-11": [{"open": "13:30", "close": "22:00"}], "2025-04-12": [{"open": "13:30", "close": "22:00"}], "2025-04-13": [{"open": "11:30", "close": "20:00"}], "2025-04-14": [{"open": "13:30", "close": "22:00"}], "2025-04-15": [{"open": "13:30", "close": "22:00"}], "2025-04-16": [{"open": "13:30", "close": "22:00"}], "2025-04-17": [{"open": "13:30", "close": "22:00"}], "2025-04-18": [{"open": "13:30", "close": "22:00"}], "2025-04-19": [{"open": "13:30", "close": "22:00"}], "2025-04-20": [{"open": "11:30", "close": "20:00"}], "2025-04-21": [{"open": "13:30", "close": "22:00"}], "2025-04-22": [{"open": "13:30", "close": "22:00"}], "2025-04-23": [{"open": "13:30", "close": "22:00"}], "2025-04-24": [{"open": "13:30", "close": "22:00"}], "2025-04-25": [{"open": "13:30", "close": "22:00"}], "2025-04-26": [{"open": "13:30", "close": "22:00"}], "2025-04-27": [{"open": "11:30", "close": "20:00"}], "2025-04-28": [{"open": "13:30", "close": "22:00"}], "2025-04-29": [{"open": "11:30", "close": "20:00"}], "2025-04-30": [{"open": "13:30", "close": "22:00"}], "2025-05-01": [{"open": "13:30", "close": "22:00"}], "2025-05-02": [{"open": "13:30", "close": "22:00"}], "2025-05-03": [{"open": "11:30", "close": "20:00"}], "2025-05-04": [{"open": "11:30", "close": "20:00"}], "2025-05-05": [{"open": "11:30", "close": "20:00"}], "2025-05-06": [{"open": "11:30", "close": "20:00"}], "2025-05-07": [{"open": "13:30", "close": "22:00"}], "2025-05-08": [{"open": "13:30", "close": "22:00"}], "2025-05-09": [{"open": "13:30", "close": "22:00"}], "2025-05-10": [{"open": "13:30", "close": "22:00"}], "2025-05-11": [{"open": "11:30", "close": "20:00"}], "2025-05-12": [{"open": "13:30", "close": "22:00"}], "2025-05-13": [{"open": "13:30", "close": "22:00"}], "2025-05-14": [{"open": "13:30", "close": "22:00"}], "2025-05-15": [{"open": "13:30", "close": "22:00"}], "2025-05-16": [{"open": "13:30", "close": "22:00"}], "2025-05-17": [{"open": "13:30", "close": "22:00"}], "2025-05-18": [{"open": "11:30", "close": "20:00"}], "2025-05-19": [{"open": "13:30", "close": "22:00"}], "2025-05-20": [{"open": "13:30", "close": "22:00"}], "2025-05-21": [{"open": "13:30", "close": "22:00"}], "2025-05-22": [{"open": "13:30", "close": "22:00"}], "2025-05-23": [{"open": "13:30", "close": "22:00"}], "2025-05-24": [{"open": "13:30", "close": "22:00"}], "2025-05-25": [{"open": "11:30", "close": "20:00"}], "2025-05-26": [{"open": "13:30", "close": "22:00"}], "2025-05-27": [{"open": "13:30", "close": "22:00"}], "2025-05-28": [{"open": "13:30", "close": "22:00"}], "2025-05-29": [{"open": "13:30", "close": "22:00"}], "2025-05-30": [{"open": "13:30", "close": "22:00"}], "2025-05-31": [{"open": "13:30", "close": "22:00"}], "2025-06-01": [{"open": "11:30", "close": "20:00"}], "2025-06-02": [{"open": "13:30", "close": "22:00"}], "2025-06-03": [{"open": "13:30", "close": "22:00"}], "2025-06-04": [{"open": "13:30", "close": "22:00"}], "2025-06-05": [{"open": "13:30", "close": "22:00"}], "2025-06-06": [{"open": "13:30", "close": "22:00"}], "2025-06-07": [{"open": "13:30", "close": "22:00"}], "2025-06-08": [{"open": "11:30", "close": "20:00"}], "2025-06-09": [{"open": "13:30", "close": "22:00"}], "2025-06-10": [{"open": "13:30", "close": "22:00"}], "2025-06-11": [{"open": "13:30", "close": "22:00"}], "2025-06-12": [{"open": "13:30", "close": "22:00"}], "2025-06-13": [{"open": "13:30", "close": "22:00"}], "2025-06-14": [{"open": "13:30", "close": "22:00"}], "2025-06-15": [{"open": "11:30", "close": "20:00"}], "2025-06-16": [{"open": "13:30", "close": "22:00"}], "2025-06-17": [{"open": "13:30", "close": "22:00"}], "2025-06-18": [{"open": "13:30", "close": "22:00"}], "2025-06-19": [{"open": "13:30", "close": "22:00"}], "2025-06-20": [{"open": "13:30", "close": "22:00"}], "2025-06-21": [{"open": "13:30", "close": "22:00"}], "2025-06-22": [{"open": "11:30", "close": "20:00"}], "2025-06-23": [{"open": "13:30", "close": "22:00"}], "2025-06-24": [{"open": "13:30", "close": "22:00"}], "2025-06-25": [{"open": "13:30", "close": "22:00"}], "2025-06-26": [{"open": "13:30", "close": "22:00"}], "2025-06-27": [{"open": "13:30", "close": "22:00"}], "2025-06-28": [{"open": "13:30", "close": "22:00"}], "2025-06-29": [{"open": "11:30", "close": "20:00"}], "2025-06-30": [{"open": "13:30", "close": "22:00"}], "2025-07-01": [{"open": "13:30", "close": "22:00"}], "2025-07-02": [{"open": "13:30", "close": "22:00"}], "2025-07-03": [{"open": "13:30", "close": "22:00"}], "2025-07-04": [{"open": "13:30", "close": "22:00"}], "2025-07-05": [{"open": "13:30", "close": "22:00"}], "2025-07-06": [{"open": "11:30", "close": "20:00"}], "2025-07-07": [{"open": "13:30", "close": "22:00"}], "2025-07-08": [{"open": "13:30", "close": "22:00"}], "2025-07-09": [{"open": "13:30", "close": "22:00"}], "2025-07-10": [{"open": "13:30", "close": "22:00"}], "2025-07-11": [{"open": "13:30", "close": "22:00"}], "2025-07-12": [{"open": "13:30", "close": "22:00"}], "2025-07-13": [{"open": "11:30", "close": "20:00"}], "2025-07-14": [{"open": "13:30", "close": "22:00"}], "2025-07-15": [{"open": "13:30", "close": "22:00"}], "2025-07-16": [{"open": "13:30", "close": "22:00"}], "2025-07-17": [{"open": "13:30", "close": "22:00"}], "2025-07-18": [{"open": "13:30", "close": "22:00"}], "2025-07-19": [{"open": "13:30", "close": "22:00"}], "2025-07-20": [{"open": "11:30", "close": "20:00"}], "2025-07-21": [{"open": "11:30", "close": "20:00"}], "2025-07-22": [{"open": "13:30", "close": "22:00"}], "2025-07-23": [{"open": "13:30", "close": "22:00"}], "2025-07-24": [{"open": "13:30", "close": "22:00"}], "2025-07-25": [{"open": "13:30", "close": "22:00"}], "2025-07-26": [{"open": "13:30", "close": "22:00"}], "2025-07-27": [{"open": "11:30", "close": "20:00"}], "2025-07-28": [{"open": "13:30", "close": "22:00"}], "2025-07-29": [{"open": "13:30", "close": "22:00"}], "2025-07-30": [{"open": "13:30", "close": "22:00"}], "2025-07-31": [{"open": "13:30", "close": "22:00"}], "2025-08-01": [{"open": "13:30", "close": "22:00"}], "2025-08-02": [{"open": "13:30", "close": "22:00"}], "2025-08-03": [{"open": "11:30", "close": "20:00"}], "2025-08-04": [{"open": "13:30", "close": "22:00"}], "2025-08-05": [{"open": "13:30", "close": "22:00"}], "2025-08-06": [{"open": "13:30", "close": "22:00"}], "2025-08-07": [{"open": "13:30", "close": "22:00"}], "2025-08-08": [{"open": "13:30", "close": "22:00"}], "2025-08-09": [{"open": "13:30", "close": "22:00"}], "2025-08-10": [{"open": "11:30", "close": "20:00"}], "2025-08-11": [{"open": "11:30", "close": "20:00"}], "2025-08-12": [{"open": "13:30", "close": "22:00"}], "2025-08-13": [{"open": "13:30", "close": "22:00"}], "2025-08-14": [{"open": "13:30", "close": "22:00"}], "2025-08-15": [{"open": "13:30", "close": "22:00"}], "2025-08-16": [{"open": "13:30", "close": "22:00"}], "2025-08-17": [{"open": "11:30", "close": "20:00"}], "2025-08-18": [{"open": "13:30", "close": "22:00"}], "2025-08-19": [{"open": "13:30", "close": "22:00"}], "2025-08-20": [{"open": "13:30", "close": "22:00"}], "2025-08-21": [{"open": "13:30", "close": "22:00"}], "2025-08-22": [{"open": "13:30", "close": "22:00"}], "2025-08-23": [{"open": "13:30", "close": "22:00"}], "2025-08-24": [{"open": "11:30", "close": "20:00"}], "2025-08-25": [{"open": "13:30", "close": "22:00"}], "2025-08-26": [{"open": "13:30", "close": "22:00"}], "2025-08-27": [{"open": "13:30", "close": "22:00"}], "2025-08-28": [{"open": "13:30", "close": "22:00"}], "2025-08-29": [{"open": "13:30", "close": "22:00"}], "2025-08-30": [{"open": "13:30", "close": "22:00"}], "2025-08-31": [{"open": "11:30", "close": "20:00"}], "2025-09-01": [{"open": "13:30", "close": "22:00"}], "2025-09-02": [{"open": "13:30", "close": "22:00"}], "2025-09-03": [{"open": "13:30", "close": "22:00"}], "2025-09-04": [{"open": "13:30", "close": "22:00"}], "2025-09-05": [{"open": "13:30", "close": "22:00"}], "2025-09-06": [{"open": "13:30", "close": "22:00"}], "2025-09-07": [{"open": "11:30", "close": "20:00"}], "2025-09-08": [{"open": "13:30", "close": "22:00"}], "2025-09-09": [{"open": "13:30", "close": "22:00"}], "2025-09-10": [{"open": "13:30", "close": "22:00"}], "2025-09-11": [{"open": "13:30", "close": "22:00"}], "2025-09-12": [{"open": "13:30", "close": "22:00"}], "2025-09-13": [{"open": "13:30", "close": "22:00"}], "2025-09-14": [{"open": "11:30", "close": "20:00"}], "2025-09-15": [{"open": "11:30", "close": "20:00"}], "2025-09-16": [{"open": "13:30", "close": "22:00"}], "2025-09-17": [{"open": "13:30", "close": "22:00"}], "2025-09-18": [{"open": "13:30", "close": "22:00"}], "2025-09-19": [{"open": "13:30", "close": "22:00"}], "2025-09-20": [{"open": "13:30", "close": "22:00"}], "2025-09-21": [{"open": "11:30", "close": "20:00"}], "2025-09-22": [{"open": "13:30", "close": "22:00"}], "2025-09-23": [{"open": "11:30", "close": "20:00"}], "2025-09-24": [{"open": "13:30", "close": "22:00"}], "2025-09-25": [{"open": "13:30", "close": "22:00"}], "2025-09-26": [{"open": "13:30", "close": "22:00"}], "2025-09-27": [{"open": "13:30", "close": "22:00"}], "2025-09-28": [{"open": "11:30", "close": "20:00"}], "2025-09-29": [{"open": "13:30", "close": "22:00"}], "2025-09-30": [{"open": "13:30", "close": "22:00"}], "2025-10-01": [{"open": "13:30", "close": "22:00"}], "2025-10-02": [{"open": "13:30", "close": "22:00"}], "2025-10-03": [{"open": "13:30", "close": "22:00"}], "2025-10-04": [{"open": "13:30", "close": "22:00"}], "2025-10-05": [{"open": "11:30", "close": "20:00"}], "2025-10-06": [{"open": "13:30", "close": "22:00"}], "2025-10-07": [{"open": "13:30", "close": "22:00"}], "2025-10-08": [{"open": "13:30", "close": "22:00"}], "2025-10-09": [{"open": "13:30", "close": "22:00"}], "2025-10-10": [{"open": "13:30", "close": "22:00"}], "2025-10-11": [{"open": "13:30", "close": "22:00"}], "2025-10-12": [{"open": "11:30", "close": "20:00"}], "2025-10-13": [{"open": "11:30", "close": "20:00"}], "2025-10-14": [{"open": "13:30", "close": "22:00"}], "2025-10-15": [{"open": "13:30", "close": "22:00"}], "2025-10-16": [{"open": "13:30", "close": "22:00"}], "2025-10-17": [{"open": "13:30", "close": "22:00"}], "2025-10-18": [{"open": "13:30", "close": "22:00"}], "2025-10-19": [{"open": "11:30", "close": "20:00"}], "2025-10-20": [{"open": "13:30", "close": "22:00"}], "2025-10-21": [{"open": "13:30", "close": "22:00"}], "2025-10-22": [{"open": "13:30", "close": "22:00"}], "2025-10-23": [{"open": "13:30", "close": "22:00"}], "2025-10-24": [{"open": "13:30", "close": "22:00"}], "2025-10-25": [{"open": "13:30", "close": "22:00"}], "2025-10-26": [{"open": "11:30", "close": "20:00"}], "2025-10-27": [{"open": "13:30", "close": "22:00"}], "2025-10-28": [{"open": "13:30", "close": "22:00"}], "2025-10-29": [{"open": "13:30", "close": "22:00"}], "2025-10-30": [{"open": "13:30", "close": "22:00"}], "2025-10-31": [{"open": "13:30", "close": "22:00"}], "2025-11-01": [{"open": "13:30", "close": "22:00"}], "2025-11-02": [{"open": "11:30", "close": "20:00"}], "2025-11-03": [{"open": "11:30", "close": "20:00"}], "2025-11-04": [{"open": "13:30", "close": "22:00"}], "2025-11-05": [{"open": "13:30", "close": "22:00"}], "2025-11-06": [{"open": "13:30", "close": "22:00"}], "2025-11-07": [{"open": "13:30", "close": "22:00"}], "2025-11-08": [{"open": "13:30", "close": "22:00"}], "2025-11-09": [{"open": "11:30", "close": "20:00"}], "2025-11-10": [{"open": "13:30", "close": "22:00"}], "2025-11-11": [{"open": "13:30", "close": "22:00"}], "2025-11-12": [{"open": "13:30", "close": "22:00"}], "2025-11-13": [{"open": "13:30", "close": "22:00"}], "2025-11-14": [{"open": "13:30", "close": "22:00"}], "2025-11-15": [{"open": "13:30", "close": "22:00"}], "2025-11-16": [{"open": "11:30", "close": "20:00"}], "2025-11-17": [{"open": "13:30", "close": "22:00"}], "2025-11-18": [{"open": "13:30", "close": "22:00"}], "2025-11-19": [{"open": "13:30", "close": "22:00"}], "2025-11-20": [{"open": "13:30", "close": "22:00"}], "2025-11-21": [{"open": "13:30", "close": "22:00"}], "2025-11-22": [{"open": "13:30", "close": "22:00"}], "2025-11-23": [{"open": "11:30", "close": "20:00"}], "2025-11-24": [{"open": "11:30", "close": "20:00"}], "2025-11-25": [{"open": "13:30", "close": "22:00"}], "2025-11-26": [{"open": "13:30", "close": "22:00"}], "2025-11-27": [{"open": "13:30", "close": "22:00"}], "2025-11-28": [{"open": "13:30", "close": "22:00"}], "2025-11-29": [{"open": "13:30", "close": "22:00"}], "2025-11-30": [{"open": "11:30", "close": "20:00"}], "2025-12-01": [{"open": "13:30", "close": "22:00"}], "2025-12-02": [{"open": "13:30", "close": "22:00"}], "2025-12-03": [{"open": "13:30", "close": "22:00"}], "2025-12-04": [{"open": "13:30", "close": "22:00"}], "2025-12-05": [{"open": "13:30", "close": "22:00"}], "2025-12-06": [{"open": "13:30", "close": "22:00"}], "2025-12-07": [{"open": "11:30", "close": "20:00"}], "2025-12-08": [{"open": "13:30", "close": "22:00"}], "2025-12-09": [{"open": "13:30", "close": "22:00"}], "2025-12-10": [{"open": "13:30", "close": "22:00"}], "2025-12-11": [{"open": "13:30", "close": "22:00"}], "2025-12-12": [{"open": "13:30", "close": "22:00"}], "2025-12-13": [{"open": "13:30", "close": "22:00"}], "2025-12-14": [{"open": "11:30", "close": "20:00"}], "2025-12-15": [{"open": "13:30", "close": "22:00"}], "2025-12-16": [{"open": "13:30", "close": "22:00"}], "2025-12-17": [{"open": "13:30", "close": "22:00"}], "2025-12-18": [{"open": "13:30", "close": "22:00"}], "2025-12-19": [{"open": "13:30", "close": "22:00"}], "2025-12-20": [{"open": "13:30", "close": "22:00"}], "2025-12-21": [{"open": "11:30", "close": "20:00"}], "2025-12-22": [{"open": "13:30", "close": "22:00"}], "2025-12-23": [{"open": "13:30", "close": "22:00"}], "2025-12-24": [{"open": "13:30", "close": "22:00"}], "2025-12-25": [{"open": "13:30", "close": "22:00"}], "2025-12-26": [{"open": "13:30", "close": "22:00"}], "2025-12-27": [{"open": "13:30", "close": "22:00"}], "2025-12-28": [{"open": "11:30", "close": "20:00"}], "2025-12-29": [{"open": "13:30", "close": "22:00"}], "2025-12-30": [{"open": "13:30", "close": "22:00"}], "2025-12-31": [{"open": "13:30", "close": "22:00"}]}, "FOUR SNOW TOKAI": {"2025-01-02": [{"open": "15:00", "close": "22:30"}], "2025-01-03": [{"open": "15:00", "close": "22:30"}], "2025-01-04": [{"open": "15:00", "close": "22:30"}], "2025-01-09": [{"open": "15:00", "close": "22:30"}], "2025-01-10": [{"open": "15:00", "close": "22:30"}], "2025-01-11": [{"open": "15:00", "close": "22:30"}], "2025-01-16": [{"open": "15:00", "close": "22:30"}], "2025-01-17": [{"open": "15:00", "close": "22:30"}], "2025-01-18": [{"open": "15:00", "close": "22:30"}], "2025-01-23": [{"open": "15:00", "close": "22:30"}], "2025-01-24": [{"open": "15:00", "close": "22:30"}], "2025-01-25": [{"open": "15:00", "close": "22:30"}], "2025-01-30": [{"open": "15:00", "close": "22:30"}], "2025-01-31": [{"open": "15:00", "close": "22:30"}], "2025-02-01": [{"open": "15:00", "close": "22:30"}], "2025-02-06": [{"open": "15:00", "close": "22:30"}], "2025-02-07": [{"open": "15:00", "close": "22:30"}], "2025-02-08": [{"open": "15:00", "close": "22:30"}], "2025-02-13": [{"open": "15:00", "close": "22:30"}], "2025-02-14": [{"open": "15:00", "close": "22:30"}], "2025-02-15": [{"open": "15:00", "close": "22:30"}], "2025-02-20": [{"open": "15:00", "close": "22:30"}], "2025-02-21": [{"open": "15:00", "close": "22:30"}], "2025-02-22": [{"open": "15:00", "close": "22:30"}], "2025-02-27": [{"open": "15:00", "close": "22:30"}], "2025-02-28": [{"open": "15:00", "close": "22:30"}], "2025-03-01": [{"open": "15:00", "close": "22:30"}], "2025-03-06": [{"open": "15:00", "close": "22:30"}], "2025-03-07": [{"open": "15:00", "close": "22:30"}], "2025-03-08": [{"open": "15:00", "close": "22:30"}], "2025-03-13": [{"open": "15:00", "close": "22:30"}], "2025-03-14": [{"open": "15:00", "close": "22:30"}], "2025-03-15": [{"open": "15:00", "close": "22:30"}], "2025-03-20": [{"open": "15:00", "close": "22:30"}], "2025-03-21": [{"open": "15:00", "close": "22:30"}], "2025-03-22": [{"open": "15:00", "close": "22:30"}], "2025-03-27": [{"open": "15:00", "close": "22:30"}], "2025-03-28": [{"open": "15:00", "close": "22:30"}], "2025-03-29": [{"open": "15:00", "close": "22:30"}], "2025-04-01": [{"open": "12:00", "close": "22:30"}], "2025-04-02": [{"open": "12:00", "close": "22:30"}], "2025-04-04": [{"open": "12:00", "close": "22:30"}], "2025-04-05": [{"open": "12:00", "close": "22:30"}], "2025-04-06": [{"open": "09:30", "close": "20:00"}], "2025-04-07": [{"open": "12:00", "close": "22:30"}], "2025-04-08": [{"open": "12:00", "close": "22:30"}], "2025-04-09": [{"open": "12:00", "close": "22:30"}], "2025-04-11": [{"open": "12:00", "close": "22:30"}], "2025-04-12": [{"open": "12:00", "close": "22:30"}], "2025-04-13": [{"open": "09:30", "close": "20:00"}], "2025-04-14": [{"open": "12:00", "close": "22:30"}], "2025-04-15": [{"open": "12:00", "close": "22:30"}], "2025-04-16": [{"open": "12:00", "close": "22:30"}], "2025-04-18": [{"open": "12:00", "close": "22:30"}], "2025-04-19": [{"open": "12:00", "close": "22:30"}], "2025-04-20": [{"open": "09:30", "close": "20:00"}], "2025-04-21": [{"open": "12:00", "close": "22:30"}], "2025-04-22": [{"open": "12:00", "close": "22:30"}], "2025-04-23": [{"open": "12:00", "close": "22:30"}], "2025-04-25": [{"open": "12:00", "close": "22:30"}], "2025-04-26": [{"open": "12:00", "close": "22:30"}], "2025-04-27": [{"open": "09:30", "close": "20:00"}], "2025-04-28": [{"open": "12:00", "close": "22:30"}], "2025-04-29": [{"open": "09:30", "close": "20:00"}], "2025-04-30": [{"open": "12:00", "close": "22:30"}], "2025-05-02": [{"open": "12:00", "close": "22:30"}], "2025-05-03": [{"open": "09:30", "close": "20:00"}], "2025-05-04": [{"open": "09:30", "close": "20:00"}], "2025-05-05": [{"open": "09:30", "close": "20:00"}], "2025-05-06": [{"open": "09:30", "close": "20:00"}], "2025-05-07": [{"open": "12:00", "close": "22:30"}], "2025-05-09": [{"open": "12:00", "close": "22:30"}], "2025-05-10": [{"open": "12:00", "close": "22:30"}], "2025-05-11": [{"open": "09:30", "close": "20:00"}], "2025-05-12": [{"open": "12:00", "close": "22:30"}], "2025-05-13": [{"open": "12:00", "close": "22:30"}], "2025-05-14": [{"open": "12:00", "close": "22:30"}], "2025-05-16": [{"open": "12:00", "close": "22:30"}], "2025-05-17": [{"open": "12:00", "close": "22:30"}], "2025-05-18": [{"open": "09:30", "close": "20:00"}], "2025-05-19": [{"open": "12:00", "close": "22:30"}], "2025-05-20": [{"open": "12:00", "close": "22:30"}], "2025-05-21": [{"open": "12:00", "close": "22:30"}], "2025-05-23": [{"open": "12:00", "close": "22:30"}], "2025-05-24": [{"open": "12:00", "close": "22:30"}], "2025-05-25": [{"open": "09:30", "close": "20:00"}], "2025-05-26": [{"open": "12:00", "close": "22:30"}], "2025-05-27": [{"open": "12:00", "close": "22:30"}], "2025-05-28": [{"open": "12:00", "close": "22:30"}], "2025-05-30": [{"open": "12:00", "close": "22:30"}], "2025-05-31": [{"open": "12:00", "close": "22:30"}], "2025-06-01": [{"open": "09:30", "close": "20:00"}], "2025-06-02": [{"open": "12:00", "close": "22:30"}], "2025-06-03": [{"open": "12:00", "close": "22:30"}], "2025-06-04": [{"open": "12:00", "close": "22:30"}], "2025-06-06": [{"open": "12:00", "close": "22:30"}], "2025-06-07": [{"open": "12:00", "close": "22:30"}], "2025-06-08": [{"open": "09:30", "close": "20:00"}], "2025-06-09": [{"open": "12:00", "close": "22:30"}], "2025-06-10": [{"open": "12:00", "close": "22:30"}], "2025-06-11": [{"open": "12:00", "close": "22:30"}], "2025-06-13": [{"open": "12:00", "close": "22:30"}], "2025-06-14": [{"open": "12:00", "close": "22:30"}], "2025-06-15": [{"open": "09:30", "close": "20:00"}], "2025-06-16": [{"open": "12:00", "close": "22:30"}], "2025-06-17": [{"open": "12:00", "close": "22:30"}], "2025-06-18": [{"open": "12:00", "close": "22:30"}], "2025-06-20": [{"open": "12:00", "close": "22:30"}], "2025-06-21": [{"open": "12:00", "close": "22:30"}], "2025-06-22": [{"open": "09:30", "close": "20:00"}], "2025-06-23": [{"open": "12:00", "close": "22:30"}], "2025-06-24": [{"open": "12:00", "close": "22:30"}], "2025-06-25": [{"open": "12:00", "close": "22:30"}], "2025-06-27": [{"open": "12:00", "close": "22:30"}], "2025-06-28": [{"open": "12:00", "close": "22:30"}], "2025-06-29": [{"open": "09:30", "close": "20:00"}], "2025-06-30": [{"open": "12:00", "close": "22:30"}], "2025-07-01": [{"open": "12:00", "close": "22:30"}], "2025-07-02": [{"open": "12:00", "close": "22:30"}], "2025-07-04": [{"open": "12:00", "close": "22:30"}], "2025-07-05": [{"open": "12:00", "close": "22:30"}], "2025-07-06": [{"open": "09:30", "close": "20:00"}], "2025-07-07": [{"open": "12:00", "close": "22:30"}], "2025-07-08": [{"open": "12:00", "close": "22:30"}], "2025-07-09": [{"open": "12:00", "close": "22:30"}], "2025-07-11": [{"open": "12:00", "close": "22:30"}], "2025-07-12": [{"open": "12:00", "close": "22:30"}], "2025-07-13": [{"open": "09:30", "close": "20:00"}], "2025-07-14": [{"open": "12:00", "close": "22:30"}], "2025-07-15": [{"open": "12:00", "close": "22:30"}], "2025-07-16": [{"open": "12:00", "close": "22:30"}], "2025-07-18": [{"open": "12:00", "close": "22:30"}], "2025-07-19": [{"open": "12:00", "close": "22:30"}], "2025-07-20": [{"open": "09:30", "close": "20:00"}], "2025-07-21": [{"open": "09:30", "close": "20:00"}], "2025-07-22": [{"open": "12:00", "close": "22:30"}], "2025-07-23": [{"open": "12:00", "close": "22:30"}], "2025-07-25": [{"open": "12:00", "close": "22:30"}], "2025-07-26": [{"open": "12:00", "close": "22:30"}], "2025-07-27": [{"open": "09:30", "close": "20:00"}], "2025-07-28": [{"open": "12:00", "close": "22:30"}], "2025-07-29": [{"open": "12:00", "close": "22:30"}], "2025-07-30": [{"open": "12:00", "close": "22:30"}], "2025-08-01": [{"open": "12:00", "close": "22:30"}], "2025-08-02": [{"open": "12:00", "close": "22:30"}], "2025-08-03": [{"open": "09:30", "close": "20:00"}], "2025-08-04": [{"open": "12:00", "close": "22:30"}], "2025-08-05": [{"open": "12:00", "close": "22:30"}], "2025-08-06": [{"open": "12:00", "close": "22:30"}], "2025-08-08": [{"open": "12:00", "close": "22:30"}], "2025-08-09": [{"open": "12:00", "close": "22:30"}], "2025-08-10": [{"open": "09:30", "close": "20:00"}], "2025-08-11": [{"open": "09:30", "close": "20:00"}], "2025-08-12": [{"open": "12:00", "close": "22:30"}], "2025-08-13": [{"open": "12:00", "close": "22:30"}], "2025-08-15": [{"open": "12:00", "close": "22:30"}], "2025-08-16": [{"open": "12:00", "close": "22:30"}], "2025-08-17": [{"open": "09:30", "close": "20:00"}], "2025-08-18": [{"open": "12:00", "close": "22:30"}], "2025-08-19": [{"open": "12:00", "close": "22:30"}], "2025-08-20": [{"open": "12:00", "close": "22:30"}], "2025-08-22": [{"open": "12:00", "close": "22:30"}], "2025-08-23": [{"open": "12:00", "close": "22:30"}], "2025-08-24": [{"open": "09:30", "close": "20:00"}], "2025-08-25": [{"open": "12:00", "close": "22:30"}], "2025-08-26": [{"open": "12:00", "close": "22:30"}], "2025-08-27": [{"open": "12:00", "close": "22:30"}], "2025-08-29": [{"open": "12:00", "close": "22:30"}], "2025-08-30": [{"open": "12:00", "close": "22:30"}], "2025-08-31": [{"open": "09:30", "close": "20:00"}], "2025-09-01": [{"open": "12:00", "close": "22:30"}], "2025-09-02": [{"open": "12:00", "close": "22:30"}], "2025-09-03": [{"open": "12:00", "close": "22:30"}], "2025-09-05": [{"open": "12:00", "close": "22:30"}], "2025-09-06": [{"open": "12:00", "close": "22:30"}], "2025-09-07": [{"open": "09:30", "close": "20:00"}], "2025-09-08": [{"open": "12:00", "close": "22:30"}], "2025-09-09": [{"open": "12:00", "close": "22:30"}], "2025-09-10": [{"open": "12:00", "close": "22:30"}], "2025-09-12": [{"open": "12:00", "close": "22:30"}], "2025-09-13": [{"open": "12:00", "close": "22:30"}], "2025-09-14": [{"open": "09:30", "close": "20:00"}], "2025-09-15": [{"open": "09:30", "close": "20:00"}], "2025-09-16": [{"open": "12:00", "close": "22:30"}], "2025-09-17": [{"open": "12:00", "close": "22:30"}], "2025-09-19": [{"open": "12:00", "close": "22:30"}], "2025-09-20": [{"open": "12:00", "close": "22:30"}], "2025-09-21": [{"open": "09:30", "close": "20:00"}], "2025-09-22": [{"open": "12:00", "close": "22:30"}], "2025-09-23": [{"open": "09:30", "close": "20:00"}], "2025-09-24": [{"open": "12:00", "close": "22:30"}], "2025-09-26": [{"open": "12:00", "close": "22:30"}], "2025-09-27": [{"open": "12:00", "close": "22:30"}], "2025-09-28": [{"open": "09:30", "close": "20:00"}], "2025-09-29": [{"open": "12:00", "close": "22:30"}], "2025-09-30": [{"open": "12:00", "close": "22:30"}], "2025-10-01": [{"open": "12:00", "close": "22:30"}], "2025-10-03": [{"open": "12:00", "close": "22:30"}], "2025-10-04": [{"open": "12:00", "close": "22:30"}], "2025-10-05": [{"open": "09:30", "close": "20:00"}], "2025-10-06": [{"open": "12:00", "close": "22:30"}], "2025-10-07": [{"open": "12:00", "close": "22:30"}], "2025-10-08": [{"open": "12:00", "close": "22:30"}], "2025-10-10": [{"open": "12:00", "close": "22:30"}], "2025-10-11": [{"open": "12:00", "close": "22:30"}], "2025-10-12": [{"open": "09:30", "close": "20:00"}], "2025-10-13": [{"open": "09:30", "close": "20:00"}], "2025-10-14": [{"open": "12:00", "close": "22:30"}], "2025-10-15": [{"open": "12:00", "close": "22:30"}], "2025-10-17": [{"open": "12:00", "close": "22:30"}], "2025-10-18": [{"open": "12:00", "close": "22:30"}], "2025-10-19": [{"open": "09:30", "close": "20:00"}], "2025-10-20": [{"open": "12:00", "close": "22:30"}], "2025-10-21": [{"open": "12:00", "close": "22:30"}], "2025-10-22": [{"open": "12:00", "close": "22:30"}], "2025-10-24": [{"open": "12:00", "close": "22:30"}], "2025-10-25": [{"open": "12:00", "close": "22:30"}], "2025-10-26": [{"open": "09:30", "close": "20:00"}], "2025-10-27": [{"open": "12:00", "close": "22:30"}], "2025-10-28": [{"open": "12:00", "close": "22:30"}], "2025-10-29": [{"open": "12:00", "close": "22:30"}], "2025-10-31": [{"open": "12:00", "close": "22:30"}], "2025-11-01": [{"open": "12:00", "close": "22:30"}], "2025-11-02": [{"open": "09:30", "close": "20:00"}], "2025-11-03": [{"open": "09:30", "close": "20:00"}], "2025-11-04": [{"open": "12:00", "close": "22:30"}], "2025-11-05": [{"open": "12:00", "close": "22:30"}], "2025-11-07": [{"open": "12:00", "close": "22:30"}], "2025-11-08": [{"open": "12:00", "close": "22:30"}], "2025-11-09": [{"open": "09:30", "close": "20:00"}], "2025-11-10": [{"open": "12:00", "close": "22:30"}], "2025-11-11": [{"open": "12:00", "close": "22:30"}], "2025-11-12": [{"open": "12:00", "close": "22:30"}], "2025-11-14": [{"open": "12:00", "close": "22:30"}], "2025-11-15": [{"open": "12:00", "close": "22:30"}], "2025-11-16": [{"open": "09:30", "close": "20:00"}], "2025-11-17": [{"open": "12:00", "close": "22:30"}], "2025-11-18": [{"open": "12:00", "close": "22:30"}], "2025-11-19": [{"open": "12:00", "close": "22:30"}], "2025-11-21": [{"open": "12:00", "close": "22:30"}], "2025-11-22": [{"open": "12:00", "close": "22:30"}], "2025-11-23": [{"open": "09:30", "close": "20:00"}], "2025-11-24": [{"open": "09:30", "close": "20:00"}], "2025-11-25": [{"open": "12:00", "close": "22:30"}], "2025-11-26": [{"open": "12:00", "close": "22:30"}], "2025-11-28": [{"open": "12:00", "close": "22:30"}], "2025-11-29": [{"open": "12:00", "close": "22:30"}], "2025-11-30": [{"open": "09:30", "close": "20:00"}], "2025-12-01": [{"open": "12:00", "close": "22:30"}], "2025-12-02": [{"open": "12:00", "close": "22:30"}], "2025-12-03": [{"open": "12:00", "close": "22:30"}], "2025-12-05": [{"open": "12:00", "close": "22:30"}], "2025-12-06": [{"open": "12:00", "close": "22:30"}], "2025-12-07": [{"open": "09:30", "close": "20:00"}], "2025-12-08": [{"open": "12:00", "close": "22:30"}], "2025-12-09": [{"open": "12:00", "close": "22:30"}], "2025-12-10": [{"open": "12:00", "close": "22:30"}], "2025-12-12": [{"open": "12:00", "close": "22:30"}], "2025-12-13": [{"open": "12:00", "close": "22:30"}], "2025-12-14": [{"open": "09:30", "close": "20:00"}], "2025-12-15": [{"open": "12:00", "close": "22:30"}], "2025-12-16": [{"open": "12:00", "close": "22:30"}], "2025-12-17": [{"open": "12:00", "close": "22:30"}], "2025-12-19": [{"open": "12:00", "close": "22:30"}], "2025-12-20": [{"open": "12:00", "close": "22:30"}], "2025-12-21": [{"open": "09:30", "close": "20:00"}], "2025-12-22": [{"open": "12:00", "close": "22:30"}], "2025-12-23": [{"open": "12:00", "close": "22:30"}], "2025-12-24": [{"open": "12:00", "close": "22:30"}], "2025-12-26": [{"open": "12:00", "close": "22:30"}], "2025-12-27": [{"open": "12:00", "close": "22:30"}], "2025-12-28": [{"open": "09:30", "close": "20:00"}], "2025-12-29": [{"open": "12:00", "close": "22:30"}], "2025-12-30": [{"open": "12:00", "close": "22:30"}], "2025-12-31": [{"open": "12:00", "close": "22:30"}]}, "白馬さのさかWJ": {"2025-05-24": [{"open": "09:00", "close": "14:00"}], "2025-05-25": [{"open": "09:00", "close": "14:00"}], "2025-05-26": [{"open": "09:00", "close": "14:00"}], "2025-05-27": [{"open": "09:00", "close": "14:00"}], "2025-05-28": [{"open": "09:00", "close": "14:00"}], "2025-05-29": [{"open": "09:00", "close": "14:00"}], "2025-05-30": [{"open": "09:00", "close": "14:00"}], "2025-05-31": [{"open": "09:00", "close": "14:00"}], "2025-06-01": [{"open": "09:00", "close": "14:00"}], "2025-06-02": [{"open": "09:00", "close": "14:00"}], "2025-06-03": [{"open": "09:00", "close": "14:00"}], "2025-06-04": [{"open": "09:00", "close": "14:00"}], "2025-06-05": [{"open": "09:00", "close": "14:00"}], "2025-06-06": [{"open": "09:00", "close": "14:00"}], "2025-06-07": [{"open": "09:00", "close": "14:00"}], "2025-06-08": [{"open": "09:00", "close": "14:00"}], "2025-06-09": [{"open": "09:00", "close": "14:00"}], "2025-06-10": [{"open": "09:00", "close": "14:00"}], "2025-06-11": [{"open": "09:00", "close": "14:00"}], "2025-06-12": [{"open": "09:00", "close": "14:00"}], "2025-06-13": [{"open": "09:00", "close": "14:00"}], "2025-06-14": [{"open": "09:00", "close": "14:00"}], "2025-06-15": [{"open": "09:00", "close": "14:00"}], "2025-06-16": [{"open": "09:00", "close": "14:00"}], "2025-06-17": [{"open": "09:00", "close": "14:00"}], "2025-06-18": [{"open": "09:00", "close": "14:00"}], "2025-06-19": [{"open": "09:00", "close": "14:00"}], "2025-06-20": [{"open": "09:00", "close": "14:00"}], "2025-06-21": [{"open": "09:00", "close": "14:00"}], "2025-06-22": [{"open": "09:00", "close": "14:00"}], "2025-06-23": [{"open": "09:00", "close": "14:00"}], "2025-06-24": [{"open": "09:00", "close": "14:00"}], "2025-06-25": [{"open": "09:00", "close": "14:00"}], "2025-06-26": [{"open": "09:00", "close": "14:00"}], "2025-06-27": [{"open": "09:00", "close": "14:00"}], "2025-06-28": [{"open": "09:00", "close": "14:00"}], "2025-06-29": [{"open": "09:00", "close": "14:00"}], "2025-06-30": [{"open": "09:00", "close": "14:00"}], "2025-07-01": [{"open": "09:00", "close": "14:00"}], "2025-07-02": [{"open": "09:00", "close": "14:00"}], "2025-07-03": [{"open": "09:00", "close": "14:00"}], "2025-07-04": [{"open": "09:00", "close": "14:00"}], "2025-07-05": [{"open": "09:00", "close": "14:00"}], "2025-07-06": [{"open": "09:00", "close": "14:00"}], "2025-07-07": [{"open": "09:00", "close": "14:00"}], "2025-07-08": [{"open": "09:00", "close": "14:00"}], "2025-07-09": [{"open": "09:00", "close": "14:00"}], "2025-07-10": [{"open": "09:00", "close": "14:00"}], "2025-07-11": [{"open": "09:00", "close": "14:00"}], "2025-07-12": [{"open": "09:00", "close": "14:00"}], "2025-07-13": [{"open": "09:00", "close": "14:00"}], "2025-07-14": [{"open": "09:00", "close": "14:00"}], "2025-07-15": [{"open": "09:00", "close": "14:00"}], "2025-07-16": [{"open": "09:00", "close": "14:00"}], "2025-07-17": [{"open": "09:00", "close": "14:00"}], "2025-07-18": [{"open": "09:00", "close": "14:00"}], "2025-07-19": [{"open": "09:00", "close": "14:00"}], "2025-07-20": [{"open": "09:00", "close": "14:00"}], "2025-07-21": [{"open": "09:00", "close": "14:00"}], "2025-07-22": [{"open": "09:00", "close": "14:00"}], "2025-07-23": [{"open": "09:00", "close": "14:00"}], "2025-07-24": [{"open": "09:00", "close": "14:00"}], "2025-07-25": [{"open": "09:00", "close": "14:00"}], "2025-07-26": [{"open": "09:00", "close": "14:00"}], "2025-07-27": [{"open": "09:00", "close": "14:00"}], "2025-07-28": [{"open": "09:00", "close": "14:00"}], "2025-07-29": [{"open": "09:00", "close": "14:00"}], "2025-07-30": [{"open": "09:00", "close": "14:00"}], "2025-07-31": [{"open": "09:00", "close": "14:00"}], "2025-08-01": [{"open": "09:00", "close": "14:00"}], "2025-08-02": [{"open": "09:00", "close": "14:00"}], "2025-08-03": [{"open": "09:00", "close": "14:00"}], "2025-08-04": [{"open": "09:00", "close": "14:00"}], "2025-08-05": [{"open": "09:00", "close": "14:00"}], "2025-08-06": [{"open": "09:00", "close": "14:00"}], "2025-08-07": [{"open": "09:00", "close": "14:00"}], "2025-08-08": [{"open": "09:00", "close": "14:00"}], "2025-08-09": [{"open": "09:00", "close": "14:00"}], "2025-08-10": [{"open": "09:00", "close": "14:00"}], "2025-08-11": [{"open": "09:00", "close": "14:00"}], "2025-08-12": [{"open": "09:00", "close": "14:00"}], "2025-08-13": [{"open": "09:00", "close": "14:00"}], "2025-08-14": [{"open": "09:00", "close": "14:00"}], "2025-08-15": [{"open": "09:00", "close": "14:00"}], "2025-08-16": [{"open": "09:00", "close": "14:00"}], "2025-08-17": [{"open": "09:00", "close": "14:00"}], "2025-08-18": [{"open": "09:00", "close": "14:00"}], "2025-08-19": [{"open": "09:00", "close": "14:00"}], "2025-08-20": [{"open": "09:00", "close": "14:00"}], "2025-08-21": [{"open": "09:00", "close": "14:00"}], "2025-08-22": [{"open": "09:00", "close": "14:00"}], "2025-08-23": [{"open": "09:00", "close": "14:00"}], "2025-08-24": [{"open": "09:00", "close": "14:00"}], "2025-08-25": [{"open": "09:00", "close": "14:00"}], "2025-08-26": [{"open": "09:00", "close": "14:00"}], "2025-08-27": [{"open": "09:00", "close": "14:00"}], "2025-08-28": [{"open": "09:00", "close": "14:00"}], "2025-08-29": [{"open": "09:00", "close": "14:00"}], "2025-08-30": [{"open": "09:00", "close": "14:00"}], "2025-08-31": [{"open": "09:00", "close": "14:00"}], "2025-09-01": [{"open": "09:00", "close": "14:00"}], "2025-09-02": [{"open": "09:00", "close": "14:00"}], "2025-09-03": [{"open": "09:00", "close": "14:00"}], "2025-09-04": [{"open": "09:00", "close": "14:00"}], "2025-09-05": [{"open": "09:00", "close": "14:00"}], "2025-09-06": [{"open": "09:00", "close": "14:00"}], "2025-09-07": [{"open": "09:00", "close": "14:00"}], "2025-09-08": [{"open": "09:00", "close": "14:00"}], "2025-09-09": [{"open": "09:00", "close": "14:00"}], "2025-09-10": [{"open": "09:00", "close": "14:00"}], "2025-09-11": [{"open": "09:00", "close": "14:00"}], "2025-09-12": [{"open": "09:00", "close": "14:00"}], "2025-09-13": [{"open": "09:00", "close": "14:00"}], "2025-09-14": [{"open": "09:00", "close": "14:00"}], "2025-09-15": [{"open": "09:00", "close": "14:00"}], "2025-09-16": [{"open": "09:00", "close": "14:00"}], "2025-09-17": [{"open": "09:00", "close": "14:00"}], "2025-09-18": [{"open": "09:00", "close": "14:00"}], "2025-09-19": [{"open": "09:00", "close": "14:00"}], "2025-09-20": [{"open": "09:00", "close": "14:00"}], "2025-09-21": [{"open": "09:00", "close": "14:00"}], "2025-09-22": [{"open": "09:00", "close": "14:00"}], "2025-09-23": [{"open": "09:00", "close": "14:00"}], "2025-09-24": [{"open": "09:00", "close": "14:00"}], "2025-09-25": [{"open": "09:00", "close": "14:00"}], "2025-09-26": [{"open": "09:00", "close": "14:00"}], "2025-09-27": [{"open": "09:00", "close": "14:00"}], "2025-09-28": [{"open": "09:00", "close": "14:00"}], "2025-09-29": [{"open": "09:00", "close": "14:00"}], "2025-09-30": [{"open": "09:00", "close": "14:00"}], "2025-10-01": [{"open": "09:00", "close": "14:00"}], "2025-10-02": [{"open": "09:00", "close": "14:00"}], "2025-10-03": [{"open": "09:00", "close": "14:00"}], "2025-10-04": [{"open": "09:00", "close": "14:00"}], "2025-10-05": [{"open": "09:00", "close": "14:00"}], "2025-10-06": [{"open": "09:00", "close": "14:00"}], "2025-10-07": [{"open": "09:00", "close": "14:00"}], "2025-10-08": [{"open": "09:00", "close": "14:00"}], "2025-10-09": [{"open": "09:00", "close": "14:00"}], "2025-10-10": [{"open": "09:00", "close": "14:00"}], "2025-10-11": [{"open": "09:00", "close": "14:00"}], "2025-10-12": [{"open": "09:00", "close": "14:00"}], "2025-10-13": [{"open": "09:00", "close": "14:00"}], "2025-10-14": [{"open": "09:00", "close": "14:00"}], "2025-10-15": [{"open": "09:00", "close": "14:00"}], "2025-10-16": [{"open": "09:00", "close": "14:00"}], "2025-10-17": [{"open": "09:00", "close": "14:00"}], "2025-10-18": [{"open": "09:00", "close": "14:00"}], "2025-10-19": [{"open": "09:00", "close": "14:00"}], "2025-10-20": [{"open": "09:00", "close": "14:00"}], "2025-10-21": [{"open": "09:00", "close": "14:00"}], "2025-10-22": [{"open": "09:00", "close": "14:00"}], "2025-10-23": [{"open": "09:00", "close": "14:00"}], "2025-10-24": [{"open": "09:00", "close": "14:00"}], "2025-10-25": [{"open": "09:00", "close": "14:00"}], "2025-10-26": [{"open": "09:00", "close": "14:00"}]}, "Nico Emi Park": {"2025-01-01": [{"open": "09:00", "close": "22:00"}], "2025-01-02": [{"open": "12:00", "close": "22:00"}], "2025-01-03": [{"open": "12:00", "close": "22:00"}], "2025-01-04": [{"open": "12:00", "close": "22:00"}], "2025-01-05": [{"open": "09:00", "close": "22:00"}], "2025-01-06": [{"open": "12:00", "close": "22:00"}], "2025-01-07": [{"open": "12:00", "close": "22:00"}], "2025-01-08": [{"open": "12:00", "close": "22:00"}], "2025-01-09": [{"open": "12:00", "close": "22:00"}], "2025-01-10": [{"open": "12:00", "close": "22:00"}], "2025-01-11": [{"open": "12:00", "close": "22:00"}], "2025-01-12": [{"open": "09:00", "close": "22:00"}], "2025-01-13": [{"open": "09:00", "close": "22:00"}], "2025-01-14": [{"open": "12:00", "close": "22:00"}], "2025-01-15": [{"open": "12:00", "close": "22:00"}], "2025-01-16": [{"open": "12:00", "close": "22:00"}], "2025-01-17": [{"open": "12:00", "close": "22:00"}], "2025-01-18": [{"open": "12:00", "close": "22:00"}], "2025-01-19": [{"open": "09:00", "close": "22:00"}], "2025-01-20": [{"open": "12:00", "close": "22:00"}], "2025-01-21": [{"open": "12:00", "close": "22:00"}], "2025-01-22": [{"open": "12:00", "close": "22:00"}], "2025-01-23": [{"open": "12:00", "close": "22:00"}], "2025-01-24": [{"open": "12:00", "close": "22:00"}], "2025-01-25": [{"open": "12:00", "close": "22:00"}], "2025-01-26": [{"open": "09:00", "close": "22:00"}], "2025-01-27": [{"open": "12:00", "close": "22:00"}], "2025-01-28": [{"open": "12:00", "close": "22:00"}], "2025-01-29": [{"open": "12:00", "close": "22:00"}], "2025-01-30": [{"open": "12:00", "close": "22:00"}], "2025-01-31": [{"open": "12:00", "close": "22:00"}], "2025-02-01": [{"open": "12:00", "close": "22:00"}], "2025-02-02": [{"open": "09:00", "close": "22:00"}], "2025-02-03": [{"open": "12:00", "close": "22:00"}], "2025-02-04": [{"open": "12:00", "close": "22:00"}], "2025-02-05": [{"open": "12:00", "close": "22:00"}], "2025-02-06": [{"open": "12:00", "close": "22:00"}], "2025-02-07": [{"open": "12:00", "close": "22:00"}], "2025-02-08": [{"open": "12:00", "close": "22:00"}], "2025-02-09": [{"open": "09:00", "close": "22:00"}], "2025-02-10": [{"open": "12:00", "close": "22:00"}], "2025-02-11": [{"open": "09:00", "close": "22:00"}], "2025-02-12": [{"open": "12:00", "close": "22:00"}], "2025-02-13": [{"open": "12:00", "close": "22:00"}], "2025-02-14": [{"open": "12:00", "close": "22:00"}], "2025-02-15": [{"open": "12:00", "close": "22:00"}], "2025-02-16": [{"open": "09:00", "close": "22:00"}], "2025-02-17": [{"open": "12:00", "close": "22:00"}], "2025-02-18": [{"open": "12:00", "close": "22:00"}], "2025-02-19": [{"open": "12:00", "close": "22:00"}], "2025-02-20": [{"open": "12:00", "close": "22:00"}], "2025-02-21": [{"open": "12:00", "close": "22:00"}], "2025-02-22": [{"open": "12:00", "close": "22:00"}], "2025-02-23": [{"open": "09:00", "close": "22:00"}], "2025-02-24": [{"open": "09:00", "close": "22:00"}], "2025-02-25": [{"open": "12:00", "close": "22:00"}], "2025-02-26": [{"open": "12:00", "close": "22:00"}], "2025-02-27": [{"open": "12:00", "close": "22:00"}], "2025-02-28": [{"open": "12:00", "close": "22:00"}], "2025-03-01": [{"open": "12:00", "close": "22:00"}], "2025-03-02": [{"open": "09:00", "close": "22:00"}], "2025-03-03": [{"open": "12:00", "close": "22:00"}], "2025-03-04": [{"open": "12:00", "close": "22:00"}], "2025-03-05": [{"open": "12:00", "close": "22:00"}], "2025-03-06": [{"open": "12:00", "close": "22:00"}], "2025-03-07": [{"open": "12:00", "close": "22:00"}], "2025-03-08": [{"open": "12:00", "close": "22:00"}], "2025-03-09": [{"open": "09:00", "close": "22:00"}], "2025-03-10": [{"open": "12:00", "close": "22:00"}], "2025-03-11": [{"open": "12:00", "close": "22:00"}], "2025-03-12": [{"open": "12:00", "close": "22:00"}], "2025-03-13": [{"open": "12:00", "close": "22:00"}], "2025-03-14": [{"open": "12:00", "close": "22:00"}], "2025-03-15": [{"open": "12:00", "close": "22:00"}], "2025-03-16": [{"open": "09:00", "close": "22:00"}], "2025-03-17": [{"open": "12:00", "close": "22:00"}], "2025-03-18": [{"open": "12:00", "close": "22:00"}], "2025-03-19": [{"open": "12:00", "close": "22:00"}], "2025-03-20": [{"open": "09:00", "close": "22:00"}], "2025-03-21": [{"open": "12:00", "close": "22:00"}], "2025-03-22": [{"open": "12:00", "close": "22:00"}], "2025-03-23": [{"open": "09:00", "close": "22:00"}], "2025-03-24": [{"open": "12:00", "close": "22:00"}], "2025-03-25": [{"open": "12:00", "close": "22:00"}], "2025-03-26": [{"open": "12:00", "close": "22:00"}], "2025-03-27": [{"open": "12:00", "close": "22:00"}], "2025-03-28": [{"open": "12:00", "close": "22:00"}], "2025-03-29": [{"open": "12:00", "close": "22:00"}], "2025-03-30": [{"open": "09:00", "close": "22:00"}], "2025-03-31": [{"open": "12:00", "close": "22:00"}], "2025-04-01": [{"open": "12:00", "close": "22:00"}], "2025-04-02": [{"open": "12:00", "close": "22:00"}], "2025-04-03": [{"open": "12:00", "close": "22:00"}], "2025-04-04": [{"open": "12:00", "close": "22:00"}], "2025-04-05": [{"open": "12:00", "close": "22:00"}], "2025-04-06": [{"open": "09:00", "close": "22:00"}], "2025-04-07": [{"open": "12:00", "close": "22:00"}], "2025-04-08": [{"open": "12:00", "close": "22:00"}], "2025-04-09": [{"open": "12:00", "close": "22:00"}], "2025-04-10": [{"open": "12:00", "close": "22:00"}], "2025-04-11": [{"open": "12:00", "close": "22:00"}], "2025-04-12": [{"open": "12:00", "close": "22:00"}], "2025-04-13": [{"open": "09:00", "close": "22:00"}], "2025-04-14": [{"open": "12:00", "close": "22:00"}], "2025-04-15": [{"open": "12:00", "close": "22:00"}], "2025-04-16": [{"open": "12:00", "close": "22:00"}], "2025-04-17": [{"open": "12:00", "close": "22:00"}], "2025-04-18": [{"open": "12:00", "close": "22:00"}], "2025-04-19": [{"open": "12:00", "close": "22:00"}], "2025-04-20": [{"open": "09:00", "close": "22:00"}], "2025-04-21": [{"open": "12:00", "close": "22:00"}], "2025-04-22": [{"open": "12:00", "close": "22:00"}], "2025-04-23": [{"open": "12:00", "close": "22:00"}], "2025-04-24": [{"open": "12:00", "close": "22:00"}], "2025-04-25": [{"open": "12:00", "close": "22:00"}], "2025-04-26": [{"open": "12:00", "close": "22:00"}], "2025-04-27": [{"open": "09:00", "close": "22:00"}], "2025-04-28": [{"open": "12:00", "close": "22:00"}], "2025-04-29": [{"open": "09:00", "close": "22:00"}], "2025-04-30": [{"open": "12:00", "close": "22:00"}], "2025-05-01": [{"open": "12:00", "close": "22:00"}], "2025-05-02": [{"open": "12:00", "close": "22:00"}], "2025-05-03": [{"open": "09:00", "close": "22:00"}], "2025-05-04": [{"open": "09:00", "close": "22:00"}], "2025-05-05": [{"open": "09:00", "close": "22:00"}], "2025-05-06": [{"open": "09:00", "close": "22:00"}], "2025-05-07": [{"open": "12:00", "close": "22:00"}], "2025-05-08": [{"open": "12:00", "close": "22:00"}], "2025-05-09": [{"open": "12:00", "close": "22:00"}], "2025-05-10": [{"open": "12:00", "close": "22:00"}], "2025-05-11": [{"open": "09:00", "close": "22:00"}], "2025-05-12": [{"open": "12:00", "close": "22:00"}], "2025-05-13": [{"open": "12:00", "close": "22:00"}], "2025-05-14": [{"open": "12:00", "close": "22:00"}], "2025-05-15": [{"open": "12:00", "close": "22:00"}], "2025-05-16": [{"open": "12:00", "close": "22:00"}], "2025-05-17": [{"open": "12:00", "close": "22:00"}], "2025-05-18": [{"open": "09:00", "close": "22:00"}], "2025-05-19": [{"open": "12:00", "close": "22:00"}], "2025-05-20": [{"open": "12:00", "close": "22:00"}], "2025-05-21": [{"open": "12:00", "close": "22:00"}], "2025-05-22": [{"open": "12:00", "close": "22:00"}], "2025-05-23": [{"open": "12:00", "close": "22:00"}], "2025-05-24": [{"open": "12:00", "close": "22:00"}], "2025-05-25": [{"open": "09:00", "close": "22:00"}], "2025-05-26": [{"open": "12:00", "close": "22:00"}], "2025-05-27": [{"open": "12:00", "close": "22:00"}], "2025-05-28": [{"open": "12:00", "close": "22:00"}], "2025-05-29": [{"open": "12:00", "close": "22:00"}], "2025-05-30": [{"open": "12:00", "close": "22:00"}], "2025-05-31": [{"open": "12:00", "close": "22:00"}], "2025-06-01": [{"open": "09:00", "close": "22:00"}], "2025-06-02": [{"open": "12:00", "close": "22:00"}], "2025-06-03": [{"open": "12:00", "close": "22:00"}], "2025-06-04": [{"open": "12:00", "close": "22:00"}], "2025-06-05": [{"open": "12:00", "close": "22:00"}], "2025-06-06": [{"open": "12:00", "close": "22:00"}], "2025-06-07": [{"open": "12:00", "close": "22:00"}], "2025-06-08": [{"open": "09:00", "close": "22:00"}], "2025-06-09": [{"open": "12:00", "close": "22:00"}], "2025-06-10": [{"open": "12:00", "close": "22:00"}], "2025-06-11": [{"open": "12:00", "close": "22:00"}], "2025-06-12": [{"open": "12:00", "close": "22:00"}], "2025-06-13": [{"open": "12:00", "close": "22:00"}], "2025-06-14": [{"open": "12:00", "close": "22:00"}], "2025-06-15": [{"open": "09:00", "close": "22:00"}], "2025-06-16": [{"open": "12:00", "close": "22:00"}], "2025-06-17": [{"open": "12:00", "close": "22:00"}], "2025-06-18": [{"open": "12:00", "close": "22:00"}], "2025-06-19": [{"open": "12:00", "close": "22:00"}], "2025-06-20": [{"open": "12:00", "close": "22:00"}], "2025-06-21": [{"open": "12:00", "close": "22:00"}], "2025-06-22": [{"open": "09:00", "close": "22:00"}], "2025-06-23": [{"open": "12:00", "close": "22:00"}], "2025-06-24": [{"open": "12:00", "close": "22:00"}], "2025-06-25": [{"open": "12:00", "close": "22:00"}], "2025-06-26": [{"open": "12:00", "close": "22:00"}], "2025-06-27": [{"open": "12:00", "close": "22:00"}], "2025-06-28": [{"open": "12:00", "close": "22:00"}], "2025-06-29": [{"open": "09:00", "close": "22:00"}], "2025-06-30": [{"open": "12:00", "close": "22:00"}], "2025-07-01": [{"open": "12:00", "close": "22:00"}], "2025-07-02": [{"open": "12:00", "close": "22:00"}], "2025-07-03": [{"open": "12:00", "close": "22:00"}], "2025-07-04": [{"open": "12:00", "close": "22:00"}], "2025-07-05": [{"open": "12:00", "close": "22:00"}], "2025-07-06": [{"open": "09:00", "close": "22:00"}], "2025-07-07": [{"open": "12:00", "close": "22:00"}], "2025-07-08": [{"open": "12:00", "close": "22:00"}], "2025-07-09": [{"open": "12:00", "close": "22:00"}], "2025-07-10": [{"open": "12:00", "close": "22:00"}], "2025-07-11": [{"open": "12:00", "close": "22:00"}], "2025-07-12": [{"open": "12:00", "close": "22:00"}], "2025-07-13": [{"open": "09:00", "close": "22:00"}], "2025-07-14": [{"open": "12:00", "close": "22:00"}], "2025-07-15": [{"open": "12:00", "close": "22:00"}], "2025-07-16": [{"open": "12:00", "close": "22:00"}], "2025-07-17": [{"open": "12:00", "close": "22:00"}], "2025-07-18": [{"open": "12:00", "close": "22:00"}], "2025-07-19": [{"open": "12:00", "close": "22:00"}], "2025-07-20": [{"open": "09:00", "close": "22:00"}], "2025-07-21": [{"open": "09:00", "close": "22:00"}], "2025-07-22": [{"open": "12:00", "close": "22:00"}], "2025-07-23": [{"open": "12:00", "close": "22:00"}], "2025-07-24": [{"open": "12:00", "close": "22:00"}], "2025-07-25": [{"open": "12:00", "close": "22:00"}], "2025-07-26": [{"open": "12:00", "close": "22:00"}], "2025-07-27": [{"open": "09:00", "close": "22:00"}], "2025-07-28": [{"open": "12:00", "close": "22:00"}], "2025-07-29": [{"open": "12:00", "close": "22:00"}], "2025-07-30": [{"open": "12:00", "close": "22:00"}], "2025-07-31": [{"open": "12:00", "close": "22:00"}], "2025-08-01": [{"open": "12:00", "close": "22:00"}], "2025-08-02": [{"open": "12:00", "close": "22:00"}], "2025-08-03": [{"open": "09:00", "close": "22:00"}], "2025-08-04": [{"open": "12:00", "close": "22:00"}], "2025-08-05": [{"open": "12:00", "close": "22:00"}], "2025-08-06": [{"open": "12:00", "close": "22:00"}], "2025-08-07": [{"open": "12:00", "close": "22:00"}], "2025-08-08": [{"open": "12:00", "close": "22:00"}], "2025-08-09": [{"open": "12:00", "close": "22:00"}], "2025-08-10": [{"open": "09:00", "close": "22:00"}], "2025-08-11": [{"open": "09:00", "close": "22:00"}], "2025-08-12": [{"open": "12:00", "close": "22:00"}], "2025-08-13": [{"open": "12:00", "close": "22:00"}], "2025-08-14": [{"open": "12:00", "close": "22:00"}], "2025-08-15": [{"open": "12:00", "close": "22:00"}], "2025-08-16": [{"open": "12:00", "close": "22:00"}], "2025-08-17": [{"open": "09:00", "close": "22:00"}], "2025-08-18": [{"open": "12:00", "close": "22:00"}], "2025-08-19": [{"open": "12:00", "close": "22:00"}], "2025-08-20": [{"open": "12:00", "close": "22:00"}], "2025-08-21": [{"open": "12:00", "close": "22:00"}], "2025-08-22": [{"open": "12:00", "close": "22:00"}], "2025-08-23": [{"open": "12:00", "close": "22:00"}], "2025-08-24": [{"open": "09:00", "close": "22:00"}], "2025-08-25": [{"open": "12:00", "close": "22:00"}], "2025-08-26": [{"open": "12:00", "close": "22:00"}], "2025-08-27": [{"open": "12:00", "close": "22:00"}], "2025-08-28": [{"open": "12:00", "close": "22:00"}], "2025-08-29": [{"open": "12:00", "close": "22:00"}], "2025-08-30": [{"open": "12:00", "close": "22:00"}], "2025-08-31": [{"open": "09:00", "close": "22:00"}], "2025-09-01": [{"open": "12:00", "close": "22:00"}], "2025-09-02": [{"open": "12:00", "close": "22:00"}], "2025-09-03": [{"open": "12:00", "close": "22:00"}], "2025-09-04": [{"open": "12:00", "close": "22:00"}], "2025-09-05": [{"open": "12:00", "close": "22:00"}], "2025-09-06": [{"open": "12:00", "close": "22:00"}], "2025-09-07": [{"open": "09:00", "close": "22:00"}], "2025-09-08": [{"open": "12:00", "close": "22:00"}], "2025-09-09": [{"open": "12:00", "close": "22:00"}], "2025-09-10": [{"open": "12:00", "close": "22:00"}], "2025-09-11": [{"open": "12:00", "close": "22:00"}], "2025-09-12": [{"open": "12:00", "close": "22:00"}], "2025-09-13": [{"open": "12:00", "close": "22:00"}], "2025-09-14": [{"open": "09:00", "close": "22:00"}], "2025-09-15": [{"open": "09:00", "close": "22:00"}], "2025-09-16": [{"open": "12:00", "close": "22:00"}], "2025-09-17": [{"open": "12:00", "close": "22:00"}], "2025-09-18": [{"open": "12:00", "close": "22:00"}], "2025-09-19": [{"open": "12:00", "close": "22:00"}], "2025-09-20": [{"open": "12:00", "close": "22:00"}], "2025-09-21": [{"open": "09:00", "close": "22:00"}], "2025-09-22": [{"open": "12:00", "close": "22:00"}], "2025-09-23": [{"open": "09:00", "close": "22:00"}], "2025-09-24": [{"open": "12:00", "close": "22:00"}], "2025-09-25": [{"open": "12:00", "close": "22:00"}], "2025-09-26": [{"open": "12:00", "close": "22:00"}], "2025-09-27": [{"open": "12:00", "close": "22:00"}], "2025-09-28": [{"open": "09:00", "close": "22:00"}], "2025-09-29": [{"open": "12:00", "close": "22:00"}], "2025-09-30": [{"open": "12:00", "close": "22:00"}], "2025-10-01": [{"open": "12:00", "close": "22:00"}], "2025-10-02": [{"open": "12:00", "close": "22:00"}], "2025-10-03": [{"open": "12:00", "close": "22:00"}], "2025-10-04": [{"open": "12:00", "close": "22:00"}], "2025-10-05": [{"open": "09:00", "close": "22:00"}], "2025-10-06": [{"open": "12:00", "close": "22:00"}], "2025-10-07": [{"open": "12:00", "close": "22:00"}], "2025-10-08": [{"open": "12:00", "close": "22:00"}], "2025-10-09": [{"open": "12:00", "close": "22:00"}], "2025-10-10": [{"open": "12:00", "close": "22:00"}], "2025-10-11": [{"open": "12:00", "close": "22:00"}], "2025-10-12": [{"open": "09:00", "close": "22:00"}], "2025-10-13": [{"open": "09:00", "close": "22:00"}], "2025-10-14": [{"open": "12:00", "close": "22:00"}], "2025-10-15": [{"open": "12:00", "close": "22:00"}], "2025-10-16": [{"open": "12:00", "close": "22:00"}], "2025-10-17": [{"open": "12:00", "close": "22:00"}], "2025-10-18": [{"open": "12:00", "close": "22:00"}], "2025-10-19": [{"open": "09:00", "close": "22:00"}], "2025-10-20": [{"open": "12:00", "close": "22:00"}], "2025-10-21": [{"open": "12:00", "close": "22:00"}], "2025-10-22": [{"open": "12:00", "close": "22:00"}], "2025-10-23": [{"open": "12:00", "close": "22:00"}], "2025-10-24": [{"open": "12:00", "close": "22:00"}], "2025-10-25": [{"open": "12:00", "close": "22:00"}], "2025-10-26": [{"open": "09:00", "close": "22:00"}], "2025-10-27": [{"open": "12:00", "close": "22:00"}], "2025-10-28": [{"open": "12:00", "close": "22:00"}], "2025-10-29": [{"open": "12:00", "close": "22:00"}], "2025-10-30": [{"open": "12:00", "close": "22:00"}], "2025-10-31": [{"open": "12:00", "close": "22:00"}], "2025-11-01": [{"open": "12:00", "close": "22:00"}], "2025-11-02": [{"open": "09:00", "close": "22:00"}], "2025-11-03": [{"open": "09:00", "close": "22:00"}], "2025-11-04": [{"open": "12:00", "close": "22:00"}], "2025-11-05": [{"open": "12:00", "close": "22:00"}], "2025-11-06": [{"open": "12:00", "close": "22:00"}], "2025-11-07": [{"open": "12:00", "close": "22:00"}], "2025-11-08": [{"open": "12:00", "close": "22:00"}], "2025-11-09": [{"open": "09:00", "close": "22:00"}], "2025-11-10": [{"open": "12:00", "close": "22:00"}], "2025-11-11": [{"open": "12:00", "close": "22:00"}], "2025-11-12": [{"open": "12:00", "close": "22:00"}], "2025-11-13": [{"open": "12:00", "close": "22:00"}], "2025-11-14": [{"open": "12:00", "close": "22:00"}], "2025-11-15": [{"open": "12:00", "close": "22:00"}], "2025-11-16": [{"open": "09:00", "close": "22:00"}], "2025-11-17": [{"open": "12:00", "close": "22:00"}], "2025-11-18": [{"open": "12:00", "close": "22:00"}], "2025-11-19": [{"open": "12:00", "close": "22:00"}], "2025-11-20": [{"open": "12:00", "close": "22:00"}], "2025-11-21": [{"open": "12:00", "close": "22:00"}], "2025-11-22": [{"open": "12:00", "close": "22:00"}], "2025-11-23": [{"open": "09:00", "close": "22:00"}], "2025-11-24": [{"open": "09:00", "close": "22:00"}], "2025-11-25": [{"open": "12:00", "close": "22:00"}], "2025-11-26": [{"open": "12:00", "close": "22:00"}], "2025-11-27": [{"open": "12:00", "close": "22:00"}], "2025-11-28": [{"open": "12:00", "close": "22:00"}], "2025-11-29": [{"open": "12:00", "close": "22:00"}], "2025-11-30": [{"open": "09:00", "close": "22:00"}], "2025-12-01": [{"open": "12:00", "close": "22:00"}], "2025-12-02": [{"open": "12:00", "close": "22:00"}], "2025-12-03": [{"open": "12:00", "close": "22:00"}], "2025-12-04": [{"open": "12:00", "close": "22:00"}], "2025-12-05": [{"open": "12:00", "close": "22:00"}], "2025-12-06": [{"open": "12:00", "close": "22:00"}], "2025-12-07": [{"open": "09:00", "close": "22:00"}], "2025-12-08": [{"open": "12:00", "close": "22:00"}], "2025-12-09": [{"open": "12:00", "close": "22:00"}], "2025-12-10": [{"open": "12:00", "close": "22:00"}], "2025-12-11": [{"open": "12:00", "close": "22:00"}], "2025-12-12": [{"open": "12:00", "close": "22:00"}], "2025-12-13": [{"open": "12:00", "close": "22:00"}], "2025-12-14": [{"open": "09:00", "close": "22:00"}], "2025-12-15": [{"open": "12:00", "close": "22:00"}], "2025-12-16": [{"open": "12:00", "close": "22:00"}], "2025-12-17": [{"open": "12:00", "close": "22:00"}], "2025-12-18": [{"open": "12:00", "close": "22:00"}], "2025-12-19": [{"open": "12:00", "close": "22:00"}], "2025-12-20": [{"open": "12:00", "close": "22:00"}], "2025-12-21": [{"open": "09:00", "close": "22:00"}], "2025-12-22": [{"open": "12:00", "close": "22:00"}], "2025-12-23": [{"open": "12:00", "close": "22:00"}], "2025-12-24": [{"open": "12:00", "close": "22:00"}], "2025-12-25": [{"open": "12:00", "close": "22:00"}], "2025-12-26": [{"open": "12:00", "close": "22:00"}], "2025-12-27": [{"open": "12:00", "close": "22:00"}], "2025-12-28": [{"open": "09:00", "close": "22:00"}], "2025-12-29": [{"open": "12:00", "close": "22:00"}], "2025-12-30": [{"open": "12:00", "close": "22:00"}], "2025-12-31": [{"open": "12:00", "close": "22:00"}]}, "埼玉クエスト": {"2025-01-01": [{"open": "11:30", "close": "20:00"}], "2025-01-02": [{"open": "13:30", "close": "22:00"}], "2025-01-03": [{"open": "13:30", "close": "22:00"}], "2025-01-04": [{"open": "11:30", "close": "23:00"}], "2025-01-05": [{"open": "11:30", "close": "20:00"}], "2025-01-06": [{"open": "13:30", "close": "22:00"}], "2025-01-07": [{"open": "13:30", "close": "22:00"}], "2025-01-08": [{"open": "13:30", "close": "22:00"}], "2025-01-09": [{"open": "13:30", "close": "22:00"}], "2025-01-10": [{"open": "13:30", "close": "22:00"}], "2025-01-11": [{"open": "11:30", "close": "23:00"}], "2025-01-12": [{"open": "11:30", "close": "20:00"}], "2025-01-13": [{"open": "11:30", "close": "20:00"}], "2025-01-14": [{"open": "13:30", "close": "22:00"}], "2025-01-15": [{"open": "13:30", "close": "22:00"}], "2025-01-16": [{"open": "13:30", "close": "22:00"}], "2025-01-17": [{"open": "13:30", "close": "22:00"}], "2025-01-18": [{"open": "11:30", "close": "23:00"}], "2025-01-19": [{"open": "11:30", "close": "20:00"}], "2025-01-20": [{"open": "13:30", "close": "22:00"}], "2025-01-21": [{"open": "13:30", "close": "22:00"}], "2025-01-22": [{"open": "13:30", "close": "22:00"}], "2025-01-23": [{"open": "13:30", "close": "22:00"}], "2025-01-24": [{"open": "13:30", "close": "22:00"}], "2025-01-25": [{"open": "11:30", "close": "23:00"}], "2025-01-26": [{"open": "11:30", "close": "20:00"}], "2025-01-27": [{"open": "13:30", "close": "22:00"}], "2025-01-28": [{"open": "13:30", "close": "22:00"}], "2025-01-29": [{"open": "13:30", "close": "22:00"}], "2025-01-30": [{"open": "13:30", "close": "22:00"}], "2025-01-31": [{"open": "13:30", "close": "22:00"}], "2025-02-01": [{"open": "11:30", "close": "23:00"}], "2025-02-02": [{"open": "11:30", "close": "20:00"}], "2025-02-03": [{"open": "13:30", "close": "22:00"}], "2025-02-04": [{"open": "13:30", "close": "22:00"}], "2025-02-05": [{"open": "13:30", "close": "22:00"}], "2025-02-06": [{"open": "13:30", "close": "22:00"}], "2025-02-07": [{"open": "13:30", "close": "22:00"}], "2025-02-08": [{"open": "11:30", "close": "23:00"}], "2025-02-09": [{"open": "11:30", "close": "20:00"}], "2025-02-10": [{"open": "13:30", "close": "22:00"}], "2025-02-11": [{"open": "11:30", "close": "20:00"}], "2025-02-12": [{"open": "13:30", "close": "22:00"}], "2025-02-13": [{"open": "13:30", "close": "22:00"}], "2025-02-14": [{"open": "13:30", "close": "22:00"}], "2025-02-15": [{"open": "11:30", "close": "23:00"}], "2025-02-16": [{"open": "11:30", "close": "20:00"}], "2025-02-17": [{"open": "13:30", "close": "22:00"}], "2025-02-18": [{"open": "13:30", "close": "22:00"}], "2025-02-19": [{"open": "13:30", "close": "22:00"}], "2025-02-20": [{"open": "13:30", "close": "22:00"}], "2025-02-21": [{"open": "13:30", "close": "22:00"}], "2025-02-22": [{"open": "11:30", "close": "23:00"}], "2025-02-23": [{"open": "11:30", "close": "20:00"}], "2025-02-24": [{"open": "11:30", "close": "20:00"}], "2025-02-25": [{"open": "13:30", "close": "22:00"}], "2025-02-26": [{"open": "13:30", "close": "22:00"}], "2025-02-27": [{"open": "13:30", "close": "22:00"}], "2025-02-28": [{"open": "13:30", "close": "22:00"}], "2025-03-01": [{"open": "11:30", "close": "23:00"}], "2025-03-02": [{"open": "11:30", "close": "20:00"}], "2025-03-03": [{"open": "13:30", "close": "22:00"}], "2025-03-04": [{"open": "13:30", "close": "22:00"}], "2025-03-05": [{"open": "13:30", "close": "22:00"}], "2025-03-06": [{"open": "13:30", "close": "22:00"}], "2025-03-07": [{"open": "13:30", "close": "22:00"}], "2025-03-08": [{"open": "11:30", "close": "23:00"}], "2025-03-09": [{"open": "11:30", "close": "20:00"}], "2025-03-10": [{"open": "13:30", "close": "22:00"}], "2025-03-11": [{"open": "13:30", "close": "22:00"}], "2025-03-12": [{"open": "13:30", "close": "22:00"}], "2025-03-13": [{"open": "13:30", "close": "22:00"}], "2025-03-14": [{"open": "13:30", "close": "22:00"}], "2025-03-15": [{"open": "11:30", "close": "23:00"}], "2025-03-16": [{"open": "11:30", "close": "20:00"}], "2025-03-17": [{"open": "13:30", "close": "22:00"}], "2025-03-18": [{"open": "13:30", "close": "22:00"}], "2025-03-19": [{"open": "13:30", "close": "22:00"}], "2025-03-20": [{"open": "11:30", "close": "20:00"}], "2025-03-21": [{"open": "13:30", "close": "22:00"}], "2025-03-22": [{"open": "11:30", "close": "23:00"}], "2025-03-23": [{"open": "11:30", "close": "20:00"}], "2025-03-24": [{"open": "13:30", "close": "22:00"}], "2025-03-25": [{"open": "13:30", "close": "22:00"}], "2025-03-26": [{"open": "13:30", "close": "22:00"}], "2025-03-27": [{"open": "13:30", "close": "22:00"}], "2025-03-28": [{"open": "13:30", "close": "22:00"}], "2025-03-29": [{"open": "11:30", "close": "23:00"}], "2025-03-30": [{"open": "11:30", "close": "20:00"}], "2025-03-31": [{"open": "13:30", "close": "22:00"}], "2025-04-01": [{"open": "13:30", "close": "22:00"}], "2025-04-02": [{"open": "13:30", "close": "22:00"}], "2025-04-03": [{"open": "13:30", "close": "22:00"}], "2025-04-04": [{"open": "13:30", "close": "22:00"}], "2025-04-05": [{"open": "11:30", "close": "23:00"}], "2025-04-06": [{"open": "11:30", "close": "20:00"}], "2025-04-07": [{"open": "13:30", "close": "22:00"}], "2025-04-08": [{"open": "13:30", "close": "22:00"}], "2025-04-09": [{"open": "13:30", "close": "22:00"}], "2025-04-10": [{"open": "13:30", "close": "22:00"}], "2025-04-11": [{"open": "13:30", "close": "22:00"}], "2025-04-12": [{"open": "11:30", "close": "23:00"}], "2025-04-13": [{"open": "11:30", "close": "20:00"}], "2025-04-14": [{"open": "13:30", "close": "22:00"}], "2025-04-15": [{"open": "13:30", "close": "22:00"}], "2025-04-16": [{"open": "13:30", "close": "22:00"}], "2025-04-17": [{"open": "13:30", "close": "22:00"}], "2025-04-18": [{"open": "13:30", "close": "22:00"}], "2025-04-19": [{"open": "11:30", "close": "23:00"}], "2025-04-20": [{"open": "11:30", "close": "20:00"}], "2025-04-21": [{"open": "13:30", "close": "22:00"}], "2025-04-22": [{"open": "13:30", "close": "22:00"}], "2025-04-23": [{"open": "13:30", "close": "22:00"}], "2025-04-24": [{"open": "13:30", "close": "22:00"}], "2025-04-25": [{"open": "13:30", "close": "22:00"}], "2025-04-26": [{"open": "11:30", "close": "23:00"}], "2025-04-27": [{"open": "11:30", "close": "20:00"}], "2025-04-28": [{"open": "13:30", "close": "22:00"}], "2025-04-29": [{"open": "11:30", "close": "20:00"}], "2025-04-30": [{"open": "13:30", "close": "22:00"}], "2025-05-01": [{"open": "13:30", "close": "22:00"}], "2025-05-02": [{"open": "13:30", "close": "22:00"}], "2025-05-03": [{"open": "11:30", "close": "20:00"}], "2025-05-04": [{"open": "11:30", "close": "20:00"}], "2025-05-05": [{"open": "11:30", "close": "20:00"}], "2025-05-06": [{"open": "11:30", "close": "20:00"}], "2025-05-07": [{"open": "13:30", "close": "22:00"}], "2025-05-08": [{"open": "13:30", "close": "22:00"}], "2025-05-09": [{"open": "13:30", "close": "22:00"}], "2025-05-10": [{"open": "11:30", "close": "23:00"}], "2025-05-11": [{"open": "11:30", "close": "20:00"}], "2025-05-12": [{"open": "13:30", "close": "22:00"}], "2025-05-13": [{"open": "13:30", "close": "22:00"}], "2025-05-14": [{"open": "13:30", "close": "22:00"}], "2025-05-15": [{"open": "13:30", "close": "22:00"}], "2025-05-16": [{"open": "13:30", "close": "22:00"}], "2025-05-17": [{"open": "11:30", "close": "23:00"}], "2025-05-18": [{"open": "11:30", "close": "20:00"}], "2025-05-19": [{"open": "13:30", "close": "22:00"}], "2025-05-20": [{"open": "13:30", "close": "22:00"}], "2025-05-21": [{"open": "13:30", "close": "22:00"}], "2025-05-22": [{"open": "13:30", "close": "22:00"}], "2025-05-23": [{"open": "13:30", "close": "22:00"}], "2025-05-24": [{"open": "11:30", "close": "23:00"}], "2025-05-25": [{"open": "11:30", "close": "20:00"}], "2025-05-26": [{"open": "13:30", "close": "22:00"}], "2025-05-27": [{"open": "13:30", "close": "22:00"}], "2025-05-28": [{"open": "13:30", "close": "22:00"}], "2025-05-29": [{"open": "13:30", "close": "22:00"}], "2025-05-30": [{"open": "13:30", "close": "22:00"}], "2025-05-31": [{"open": "11:30", "close": "23:00"}], "2025-06-01": [{"open": "11:30", "close": "20:00"}], "2025-06-02": [{"open": "13:30", "close": "22:00"}], "2025-06-03": [{"open": "13:30", "close": "22:00"}], "2025-06-04": [{"open": "13:30", "close": "22:00"}], "2025-06-05": [{"open": "13:30", "close": "22:00"}], "2025-06-06": [{"open": "13:30", "close": "22:00"}], "2025-06-07": [{"open": "11:30", "close": "23:00"}], "2025-06-08": [{"open": "11:30", "close": "20:00"}], "2025-06-09": [{"open": "13:30", "close": "22:00"}], "2025-06-10": [{"open": "13:30", "close": "22:00"}], "2025-06-11": [{"open": "13:30", "close": "22:00"}], "2025-06-12": [{"open": "13:30", "close": "22:00"}], "2025-06-13": [{"open": "13:30", "close": "22:00"}], "2025-06-14": [{"open": "11:30", "close": "23:00"}], "2025-06-15": [{"open": "11:30", "close": "20:00"}], "2025-06-16": [{"open": "13:30", "close": "22:00"}], "2025-06-17": [{"open": "13:30", "close": "22:00"}], "2025-06-18": [{"open": "13:30", "close": "22:00"}], "2025-06-19": [{"open": "13:30", "close": "22:00"}], "2025-06-20": [{"open": "13:30", "close": "22:00"}], "2025-06-21": [{"open": "11:30", "close": "23:00"}], "2025-06-22": [{"open": "11:30", "close": "20:00"}], "2025-06-23": [{"open": "13:30", "close": "22:00"}], "2025-06-24": [{"open": "13:30", "close": "22:00"}], "2025-06-25": [{"open": "13:30", "close": "22:00"}], "2025-06-26": [{"open": "13:30", "close": "22:00"}], "2025-06-27": [{"open": "13:30", "close": "22:00"}], "2025-06-28": [{"open": "11:30", "close": "23:00"}], "2025-06-29": [{"open": "11:30", "close": "20:00"}], "2025-06-30": [{"open": "13:30", "close": "22:00"}], "2025-07-01": [{"open": "13:30", "close": "22:00"}], "2025-07-02": [{"open": "13:30", "close": "22:00"}], "2025-07-03": [{"open": "13:30", "close": "22:00"}], "2025-07-04": [{"open": "13:30", "close": "22:00"}], "2025-07-05": [{"open": "11:30", "close": "23:00"}], "2025-07-06": [{"open": "11:30", "close": "20:00"}], "2025-07-07": [{"open": "13:30", "close": "22:00"}], "2025-07-08": [{"open": "13:30", "close": "22:00"}], "2025-07-09": [{"open": "13:30", "close": "22:00"}], "2025-07-10": [{"open": "13:30", "close": "22:00"}], "2025-07-11": [{"open": "13:30", "close": "22:00"}], "2025-07-12": [{"open": "11:30", "close": "23:00"}], "2025-07-13": [{"open": "11:30", "close": "20:00"}], "2025-07-14": [{"open": "13:30", "close": "22:00"}], "2025-07-15": [{"open": "13:30", "close": "22:00"}], "2025-07-16": [{"open": "13:30", "close": "22:00"}], "2025-07-17": [{"open": "13:30", "close": "22:00"}], "2025-07-18": [{"open": "13:30", "close": "22:00"}], "2025-07-19": [{"open": "11:30", "close": "23:00"}], "2025-07-20": [{"open": "11:30", "close": "20:00"}], "2025-07-21": [{"open": "11:30", "close": "20:00"}], "2025-07-22": [{"open": "13:30", "close": "22:00"}], "2025-07-23": [{"open": "13:30", "close": "22:00"}], "2025-07-24": [{"open": "13:30", "close": "22:00"}], "2025-07-25": [{"open": "13:30", "close": "22:00"}], "2025-07-26": [{"open": "11:30", "close": "23:00"}], "2025-07-27": [{"open": "11:30", "close": "20:00"}], "2025-07-28": [{"open": "13:30", "close": "22:00"}], "2025-07-29": [{"open": "13:30", "close": "22:00"}], "2025-07-30": [{"open": "13:30", "close": "22:00"}], "2025-07-31": [{"open": "13:30", "close": "22:00"}], "2025-08-01": [{"open": "13:30", "close": "22:00"}], "2025-08-02": [{"open": "11:30", "close": "23:00"}], "2025-08-03": [{"open": "11:30", "close": "20:00"}], "2025-08-04": [{"open": "13:30", "close": "22:00"}], "2025-08-05": [{"open": "13:30", "close": "22:00"}], "2025-08-06": [{"open": "13:30", "close": "22:00"}], "2025-08-07": [{"open": "13:30", "close": "22:00"}], "2025-08-08": [{"open": "13:30", "close": "22:00"}], "2025-08-09": [{"open": "11:30", "close": "23:00"}], "2025-08-10": [{"open": "11:30", "close": "20:00"}], "2025-08-11": [{"open": "11:30", "close": "20:00"}], "2025-08-12": [{"open": "13:30", "close": "22:00"}], "2025-08-13": [{"open": "13:30", "close": "22:00"}], "2025-08-14": [{"open": "13:30", "close": "22:00"}], "2025-08-15": [{"open": "13:30", "close": "22:00"}], "2025-08-16": [{"open": "11:30", "close": "23:00"}], "2025-08-17": [{"open": "11:30", "close": "20:00"}], "2025-08-18": [{"open": "13:30", "close": "22:00"}], "2025-08-19": [{"open": "13:30", "close": "22:00"}], "2025-08-20": [{"open": "13:30", "close": "22:00"}], "2025-08-21": [{"open": "13:30", "close": "22:00"}], "2025-08-22": [{"open": "13:30", "close": "22:00"}], "2025-08-23": [{"open": "11:30", "close": "23:00"}], "2025-08-24": [{"open": "11:30", "close": "20:00"}], "2025-08-25": [{"open": "13:30", "close": "22:00"}], "2025-08-26": [{"open": "13:30", "close": "22:00"}], "2025-08-27": [{"open": "13:30", "close": "22:00"}], "2025-08-28": [{"open": "13:30", "close": "22:00"}], "2025-08-29": [{"open": "13:30", "close": "22:00"}], "2025-08-30": [{"open": "11:30", "close": "23:00"}], "2025-08-31": [{"open": "11:30", "close": "20:00"}], "2025-09-01": [{"open": "13:30", "close": "22:00"}], "2025-09-02": [{"open": "13:30", "close": "22:00"}], "2025-09-03": [{"open": "13:30", "close": "22:00"}], "2025-09-04": [{"open": "13:30", "close": "22:00"}], "2025-09-05": [{"open": "13:30", "close": "22:00"}], "2025-09-06": [{"open": "11:30", "close": "23:00"}], "2025-09-07": [{"open": "11:30", "close": "20:00"}], "2025-09-08": [{"open": "13:30", "close": "22:00"}], "2025-09-09": [{"open": "13:30", "close": "22:00"}], "2025-09-10": [{"open": "13:30", "close": "22:00"}], "2025-09-11": [{"open": "13:30", "close": "22:00"}], "2025-09-12": [{"open": "13:30", "close": "22:00"}], "2025-09-13": [{"open": "11:30", "close": "23:00"}], "2025-09-14": [{"open": "11:30", "close": "20:00"}], "2025-09-15": [{"open": "11:30", "close": "20:00"}], "2025-09-16": [{"open": "13:30", "close": "22:00"}], "2025-09-17": [{"open": "13:30", "close": "22:00"}], "2025-09-18": [{"open": "13:30", "close": "22:00"}], "2025-09-19": [{"open": "13:30", "close": "22:00"}], "2025-09-20": [{"open": "11:30", "close": "23:00"}], "2025-09-21": [{"open": "11:30", "close": "20:00"}], "2025-09-22": [{"open": "13:30", "close": "22:00"}], "2025-09-23": [{"open": "11:30", "close": "20:00"}], "2025-09-24": [{"open": "13:30", "close": "22:00"}], "2025-09-25": [{"open": "13:30", "close": "22:00"}], "2025-09-26": [{"open": "13:30", "close": "22:00"}], "2025-09-27": [{"open": "11:30", "close": "23:00"}], "2025-09-28": [{"open": "11:30", "close": "20:00"}], "2025-09-29": [{"open": "13:30", "close": "22:00"}], "2025-09-30": [{"open": "13:30", "close": "22:00"}], "2025-10-01": [{"open": "13:30", "close": "22:00"}], "2025-10-02": [{"open": "13:30", "close": "22:00"}], "2025-10-03": [{"open": "13:30", "close": "22:00"}], "2025-10-04": [{"open": "11:30", "close": "23:00"}], "2025-10-05": [{"open": "11:30", "close": "20:00"}], "2025-10-06": [{"open": "13:30", "close": "22:00"}], "2025-10-07": [{"open": "13:30", "close": "22:00"}], "2025-10-08": [{"open": "13:30", "close": "22:00"}], "2025-10-09": [{"open": "13:30", "close": "22:00"}], "2025-10-10": [{"open": "13:30", "close": "22:00"}], "2025-10-11": [{"open": "11:30", "close": "23:00"}], "2025-10-12": [{"open": "11:30", "close": "20:00"}], "2025-10-13": [{"open": "11:30", "close": "20:00"}], "2025-10-14": [{"open": "13:30", "close": "22:00"}], "2025-10-15": [{"open": "13:30", "close": "22:00"}], "2025-10-16": [{"open": "13:30", "close": "22:00"}], "2025-10-17": [{"open": "13:30", "close": "22:00"}], "2025-10-18": [{"open": "11:30", "close": "23:00"}], "2025-10-19": [{"open": "11:30", "close": "20:00"}], "2025-10-20": [{"open": "13:30", "close": "22:00"}], "2025-10-21": [{"open": "13:30", "close": "22:00"}], "2025-10-22": [{"open": "13:30", "close": "22:00"}], "2025-10-23": [{"open": "13:30", "close": "22:00"}], "2025-10-24": [{"open": "13:30", "close": "22:00"}], "2025-10-25": [{"open": "11:30", "close": "23:00"}], "2025-10-26": [{"open": "11:30", "close": "20:00"}], "2025-10-27": [{"open": "13:30", "close": "22:00"}], "2025-10-28": [{"open": "13:30", "close": "22:00"}], "2025-10-29": [{"open": "13:30", "close": "22:00"}], "2025-10-30": [{"open": "13:30", "close": "22:00"}], "2025-10-31": [{"open": "13:30", "close": "22:00"}], "2025-11-01": [{"open": "11:30", "close": "23:00"}], "2025-11-02": [{"open": "11:30", "close": "20:00"}], "2025-11-03": [{"open": "11:30", "close": "20:00"}], "2025-11-04": [{"open": "13:30", "close": "22:00"}], "2025-11-05": [{"open": "13:30", "close": "22:00"}], "2025-11-06": [{"open": "13:30", "close": "22:00"}], "2025-11-07": [{"open": "13:30", "close": "22:00"}], "2025-11-08": [{"open": "11:30", "close": "23:00"}], "2025-11-09": [{"open": "11:30", "close": "20:00"}], "2025-11-10": [{"open": "13:30", "close": "22:00"}], "2025-11-11": [{"open": "13:30", "close": "22:00"}], "2025-11-12": [{"open": "13:30", "close": "22:00"}], "2025-11-13": [{"open": "13:30", "close": "22:00"}], "2025-11-14": [{"open": "13:30", "close": "22:00"}], "2025-11-15": [{"open": "11:30", "close": "23:00"}], "2025-11-16": [{"open": "11:30", "close": "20:00"}], "2025-11-17": [{"open": "13:30", "close": "22:00"}], "2025-11-18": [{"open": "13:30", "close": "22:00"}], "2025-11-19": [{"open": "13:30", "close": "22:00"}], "2025-11-20": [{"open": "13:30", "close": "22:00"}], "2025-11-21": [{"open": "13:30", "close": "22:00"}], "2025-11-22": [{"open": "11:30", "close": "23:00"}], "2025-11-23": [{"open": "11:30", "close": "20:00"}], "2025-11-24": [{"open": "11:30", "close": "20:00"}], "2025-11-25": [{"open": "13:30", "close": "22:00"}], "2025-11-26": [{"open": "13:30", "close": "22:00"}], "2025-11-27": [{"open": "13:30", "close": "22:00"}], "2025-11-28": [{"open": "13:30", "close": "22:00"}], "2025-11-29": [{"open": "11:30", "close": "23:00"}], "2025-11-30": [{"open": "11:30", "close": "20:00"}], "2025-12-01": [{"open": "13:30", "close": "22:00"}], "2025-12-02": [{"open": "13:30", "close": "22:00"}], "2025-12-03": [{"open": "13:30", "close": "22:00"}], "2025-12-04": [{"open": "13:30", "close": "22:00"}], "2025-12-05": [{"open": "13:30", "close": "22:00"}], "2025-12-06": [{"open": "11:30", "close": "23:00"}], "2025-12-07": [{"open": "11:30", "close": "20:00"}], "2025-12-08": [{"open": "13:30", "close": "22:00"}], "2025-12-09": [{"open": "13:30", "close": "22:00"}], "2025-12-10": [{"open": "13:30", "close": "22:00"}], "2025-12-11": [{"open": "13:30", "close": "22:00"}], "2025-12-12": [{"open": "13:30", "close": "22:00"}], "2025-12-13": [{"open": "11:30", "close": "23:00"}], "2025-12-14": [{"open": "11:30", "close": "20:00"}], "2025-12-15": [{"open": "13:30", "close": "22:00"}], "2025-12-16": [{"open": "13:30", "close": "22:00"}], "2025-12-17": [{"open": "13:30", "close": "22:00"}], "2025-12-18": [{"open": "13:30", "close": "22:00"}], "2025-12-19": [{"open": "13:30", "close": "22:00"}], "2025-12-20": [{"open": "11:30", "close": "23:00"}], "2025-12-21": [{"open": "11:30", "close": "20:00"}], "2025-12-22": [{"open": "13:30", "close": "22:00"}], "2025-12-23": [{"open": "13:30", "close": "22:00"}], "2025-12-24": [{"open": "13:30", "close": "22:00"}], "2025-12-25": [{"open": "13:30", "close": "22:00"}], "2025-12-26": [{"open": "13:30", "close": "22:00"}], "2025-12-27": [{"open": "11:30", "close": "23:00"}], "2025-12-28": [{"open": "11:30", "close": "20:00"}], "2025-12-29": [{"open": "13:30", "close": "22:00"}], "2025-12-30": [{"open": "13:30", "close": "22:00"}], "2025-12-31": [{"open": "13:30", "close": "22:00"}]}, "SLAB OUTDOORPARK TATEYAMA": {"2025-01-01": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-02": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-03": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-04": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-05": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-06": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-07": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-08": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-09": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-10": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-11": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-12": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-13": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-14": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-15": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-16": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-17": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-18": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-19": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-20": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-21": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-22": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-23": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-24": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-25": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-26": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-27": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-28": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-29": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-30": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-01-31": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-01": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-02": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-03": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-04": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-05": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-06": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-07": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-08": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-09": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-10": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-11": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-12": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-13": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-14": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-15": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-16": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-17": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-18": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-19": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-20": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-21": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-22": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-23": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-24": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-25": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-26": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-27": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-02-28": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-01": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-02": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-03": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-04": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-05": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-06": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-07": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-08": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-09": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-10": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-11": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-12": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-13": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-14": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-15": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-16": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-17": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-18": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-19": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-20": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-21": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-22": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-23": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-24": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-25": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-26": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-27": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-28": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-29": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-30": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-03-31": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-04-01": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-02": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-04": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-04-05": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-06": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-07": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-08": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-09": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-11": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-04-12": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-13": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-14": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-15": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-16": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-18": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-04-19": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-20": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-21": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-22": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-23": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-25": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-04-26": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-27": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-28": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-04-29": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-04-30": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-02": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-05-03": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-04": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-05": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-06": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-07": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-09": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-05-10": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-11": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-12": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-13": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-14": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-16": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-05-17": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-18": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-19": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-20": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-21": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-23": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-05-24": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-25": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-05-26": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-27": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-28": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-05-30": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-05-31": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-01": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-02": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-03": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-04": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-06": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-06-07": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-08": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-09": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-10": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-11": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-13": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-06-14": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-15": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-16": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-17": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-18": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-20": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-06-21": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-22": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-23": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-24": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-25": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-06-27": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-06-28": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-29": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-06-30": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-07-01": [{"open": "09:00", "close": "19:45"}], "2025-07-02": [{"open": "09:00", "close": "19:45"}], "2025-07-04": [{"open": "09:00", "close": "19:45"}], "2025-07-05": [{"open": "09:00", "close": "19:45"}], "2025-07-06": [{"open": "09:00", "close": "19:45"}], "2025-07-07": [{"open": "09:00", "close": "19:45"}], "2025-07-08": [{"open": "09:00", "close": "19:45"}], "2025-07-09": [{"open": "09:00", "close": "19:45"}], "2025-07-11": [{"open": "09:00", "close": "19:45"}], "2025-07-12": [{"open": "09:00", "close": "19:45"}], "2025-07-13": [{"open": "09:00", "close": "19:45"}], "2025-07-14": [{"open": "09:00", "close": "19:45"}], "2025-07-15": [{"open": "09:00", "close": "19:45"}], "2025-07-16": [{"open": "09:00", "close": "19:45"}], "2025-07-18": [{"open": "09:00", "close": "19:45"}], "2025-07-19": [{"open": "09:00", "close": "19:45"}], "2025-07-20": [{"open": "09:00", "close": "19:45"}], "2025-07-21": [{"open": "09:00", "close": "19:45"}], "2025-07-22": [{"open": "09:00", "close": "19:45"}], "2025-07-23": [{"open": "09:00", "close": "19:45"}], "2025-07-25": [{"open": "09:00", "close": "19:45"}], "2025-07-26": [{"open": "09:00", "close": "19:45"}], "2025-07-27": [{"open": "09:00", "close": "19:45"}], "2025-07-28": [{"open": "09:00", "close": "19:45"}], "2025-07-29": [{"open": "09:00", "close": "19:45"}], "2025-07-30": [{"open": "09:00", "close": "19:45"}], "2025-08-01": [{"open": "09:00", "close": "19:45"}], "2025-08-02": [{"open": "09:00", "close": "19:45"}], "2025-08-03": [{"open": "09:00", "close": "19:45"}], "2025-08-04": [{"open": "09:00", "close": "19:45"}], "2025-08-05": [{"open": "09:00", "close": "19:45"}], "2025-08-06": [{"open": "09:00", "close": "19:45"}], "2025-08-08": [{"open": "09:00", "close": "19:45"}], "2025-08-09": [{"open": "09:00", "close": "19:45"}], "2025-08-10": [{"open": "09:00", "close": "19:45"}], "2025-08-11": [{"open": "09:00", "close": "19:45"}], "2025-08-12": [{"open": "09:00", "close": "19:45"}], "2025-08-13": [{"open": "09:00", "close": "19:45"}], "2025-08-15": [{"open": "09:00", "close": "19:45"}], "2025-08-16": [{"open": "09:00", "close": "19:45"}], "2025-08-17": [{"open": "09:00", "close": "19:45"}], "2025-08-18": [{"open": "09:00", "close": "19:45"}], "2025-08-19": [{"open": "09:00", "close": "19:45"}], "2025-08-20": [{"open": "09:00", "close": "19:45"}], "2025-08-22": [{"open": "09:00", "close": "19:45"}], "2025-08-23": [{"open": "09:00", "close": "19:45"}], "2025-08-24": [{"open": "09:00", "close": "19:45"}], "2025-08-25": [{"open": "09:00", "close": "19:45"}], "2025-08-26": [{"open": "09:00", "close": "19:45"}], "2025-08-27": [{"open": "09:00", "close": "19:45"}], "2025-08-29": [{"open": "09:00", "close": "19:45"}], "2025-08-30": [{"open": "09:00", "close": "19:45"}], "2025-08-31": [{"open": "09:00", "close": "19:45"}], "2025-09-01": [{"open": "09:00", "close": "19:45"}], "2025-09-02": [{"open": "09:00", "close": "19:45"}], "2025-09-03": [{"open": "09:00", "close": "19:45"}], "2025-09-05": [{"open": "09:00", "close": "19:45"}], "2025-09-06": [{"open": "09:00", "close": "19:45"}], "2025-09-07": [{"open": "09:00", "close": "19:45"}], "2025-09-08": [{"open": "09:00", "close": "19:45"}], "2025-09-09": [{"open": "09:00", "close": "19:45"}], "2025-09-10": [{"open": "09:00", "close": "19:45"}], "2025-09-12": [{"open": "09:00", "close": "19:45"}], "2025-09-13": [{"open": "09:00", "close": "19:45"}], "2025-09-14": [{"open": "09:00", "close": "19:45"}], "2025-09-15": [{"open": "09:00", "close": "19:45"}], "2025-09-16": [{"open": "09:00", "close": "19:45"}], "2025-09-17": [{"open": "09:00", "close": "19:45"}], "2025-09-19": [{"open": "09:00", "close": "19:45"}], "2025-09-20": [{"open": "09:00", "close": "19:45"}], "2025-09-21": [{"open": "09:00", "close": "19:45"}], "2025-09-22": [{"open": "09:00", "close": "19:45"}], "2025-09-23": [{"open": "09:00", "close": "19:45"}], "2025-09-24": [{"open": "09:00", "close": "19:45"}], "2025-09-26": [{"open": "09:00", "close": "19:45"}], "2025-09-27": [{"open": "09:00", "close": "19:45"}], "2025-09-28": [{"open": "09:00", "close": "19:45"}], "2025-09-29": [{"open": "09:00", "close": "19:45"}], "2025-09-30": [{"open": "09:00", "close": "19:45"}], "2025-10-01": [{"open": "09:00", "close": "19:45"}], "2025-10-03": [{"open": "09:00", "close": "19:45"}], "2025-10-04": [{"open": "09:00", "close": "19:45"}], "2025-10-05": [{"open": "09:00", "close": "19:45"}], "2025-10-06": [{"open": "09:00", "close": "19:45"}], "2025-10-07": [{"open": "09:00", "close": "19:45"}], "2025-10-08": [{"open": "09:00", "close": "19:45"}], "2025-10-10": [{"open": "09:00", "close": "19:45"}], "2025-10-11": [{"open": "09:00", "close": "19:45"}], "2025-10-12": [{"open": "09:00", "close": "19:45"}], "2025-10-13": [{"open": "09:00", "close": "19:45"}], "2025-10-14": [{"open": "09:00", "close": "19:45"}], "2025-10-15": [{"open": "09:00", "close": "19:45"}], "2025-10-17": [{"open": "09:00", "close": "19:45"}], "2025-10-18": [{"open": "09:00", "close": "19:45"}], "2025-10-19": [{"open": "09:00", "close": "19:45"}], "2025-10-20": [{"open": "09:00", "close": "19:45"}], "2025-10-21": [{"open": "09:00", "close": "19:45"}], "2025-10-22": [{"open": "09:00", "close": "19:45"}], "2025-10-24": [{"open": "09:00", "close": "19:45"}], "2025-10-25": [{"open": "09:00", "close": "19:45"}], "2025-10-26": [{"open": "09:00", "close": "19:45"}], "2025-10-27": [{"open": "09:00", "close": "19:45"}], "2025-10-28": [{"open": "09:00", "close": "19:45"}], "2025-10-29": [{"open": "09:00", "close": "19:45"}], "2025-10-31": [{"open": "09:00", "close": "19:45"}], "2025-11-01": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-02": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-03": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-04": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-05": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-07": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-11-08": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-09": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-10": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-11": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-12": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-14": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-11-15": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-16": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-17": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-18": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-19": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-21": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-11-22": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-23": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-24": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-25": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-26": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}], "2025-11-28": [{"open": "09:00", "close": "11:30"}, {"open": "11:45", "close": "14:15"}, {"open": "14:30", "close": "17:00"}, {"open": "18:00", "close": "20:30"}], "2025-11-29": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-11-30": [{"open": "08:00", "close": "10:30"}, {"open": "10:45", "close": "13:15"}, {"open": "13:30", "close": "16:00"}, {"open": "16:15", "close": "18:45"}], "2025-12-01": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-02": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-03": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-04": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-05": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-06": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-07": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-08": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-09": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-10": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-11": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-12": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-13": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-14": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-15": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-16": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-17": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-18": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-19": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-20": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-21": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-22": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-23": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-24": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-25": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-26": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-27": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-28": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-29": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-30": [{"open": "00:00", "close": "23:59", "_allDay": true}], "2025-12-31": [{"open": "00:00", "close": "23:59", "_allDay": true}]}, "THE KINGS 千葉": {"2025-01-01": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-01-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-05": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-01-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-12": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-01-13": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-01-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-19": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-01-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-26": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-01-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-01-31": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-02": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-02-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-09": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-02-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-11": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-02-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-16": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-02-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-23": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-02-24": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-02-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-02-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-02": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-03-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-09": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-03-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-16": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-03-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-20": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-03-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-23": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-03-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-03-30": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-03-31": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-06": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-04-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-13": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-04-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-20": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-04-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-27": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-04-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-04-29": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-04-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-03": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-04": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-05": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-06": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-11": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-18": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-25": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-05-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-05-31": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-01": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-06-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-08": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-06-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-15": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-06-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-22": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-06-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-06-29": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-06-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-06": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-07-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-13": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-07-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-20": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-07-21": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-07-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-27": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-07-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-07-31": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-03": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-08-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-10": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-08-11": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-08-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-17": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-08-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-24": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-08-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-08-31": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-07": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-14": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-15": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-21": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-23": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-28": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-09-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-09-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-05": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-10-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-12": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-10-13": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-10-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-19": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-10-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-26": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-10-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-10-31": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-02": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-11-03": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-11-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-07": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-09": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-11-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-14": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-16": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-11-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-21": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-23": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-11-24": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-11-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-28": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-11-30": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-12-01": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-02": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-03": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-04": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-05": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-06": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-07": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-12-08": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-09": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-10": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-11": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-12": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-13": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-14": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-12-15": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-16": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-17": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-18": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-19": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-20": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-21": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-12-22": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-23": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-24": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-25": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-26": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-27": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-28": [{"open": "10:00", "close": "14:30"}, {"open": "15:00", "close": "19:30"}], "2025-12-29": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-30": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}], "2025-12-31": [{"open": "13:00", "close": "17:30"}, {"open": "18:00", "close": "22:30"}]}, "ウォータージャンプ S-AIR": {"2025-10-01": [{"open": "11:00", "close": "21:00"}], "2025-10-02": [{"open": "11:00", "close": "21:00"}], "2025-10-03": [{"open": "11:00", "close": "21:30"}], "2025-10-04": [{"open": "11:00", "close": "21:30"}], "2025-10-05": [{"open": "11:00", "close": "21:00"}], "2025-10-06": [{"open": "11:00", "close": "21:00"}], "2025-10-08": [{"open": "11:00", "close": "21:00"}], "2025-10-09": [{"open": "11:00", "close": "21:00"}], "2025-10-10": [{"open": "11:00", "close": "21:30"}], "2025-10-11": [{"open": "11:00", "close": "21:30"}], "2025-10-12": [{"open": "11:00", "close": "21:00"}], "2025-10-13": [{"open": "11:00", "close": "21:00"}], "2025-10-15": [{"open": "11:00", "close": "21:00"}], "2025-10-16": [{"open": "11:00", "close": "21:00"}], "2025-10-17": [{"open": "11:00", "close": "21:30"}], "2025-10-18": [{"open": "11:00", "close": "21:30"}], "2025-10-19": [{"open": "11:00", "close": "21:00"}], "2025-10-20": [{"open": "11:00", "close": "21:00"}], "2025-10-22": [{"open": "11:00", "close": "21:00"}], "2025-10-23": [{"open": "11:00", "close": "21:00"}], "2025-10-24": [{"open": "11:00", "close": "21:30"}], "2025-10-25": [{"open": "11:00", "close": "21:30"}], "2025-10-26": [{"open": "11:00", "close": "21:00"}], "2025-10-27": [{"open": "13:30", "close": "21:00"}], "2025-10-29": [{"open": "13:30", "close": "21:00"}], "2025-10-30": [{"open": "13:30", "close": "21:00"}], "2025-10-31": [{"open": "13:30", "close": "21:00"}], "2025-11-01": [{"open": "11:00", "close": "18:00"}], "2025-11-02": [{"open": "11:00", "close": "18:00"}], "2025-11-03": [{"open": "11:00", "close": "18:00"}], "2025-11-05": [{"open": "13:30", "close": "21:00"}], "2025-11-06": [{"open": "13:30", "close": "21:00"}], "2025-11-07": [{"open": "13:30", "close": "21:00"}], "2025-11-08": [{"open": "11:00", "close": "18:00"}], "2025-11-09": [{"open": "11:00", "close": "18:00"}], "2025-11-10": [{"open": "13:30", "close": "21:00"}], "2025-11-12": [{"open": "13:30", "close": "21:00"}], "2025-11-13": [{"open": "13:30", "close": "21:00"}], "2025-11-14": [{"open": "13:30", "close": "21:00"}], "2025-11-15": [{"open": "11:00", "close": "18:00"}], "2025-11-16": [{"open": "11:00", "close": "18:00"}], "2025-11-17": [{"open": "13:30", "close": "21:00"}], "2025-11-19": [{"open": "13:30", "close": "21:00"}], "2025-11-20": [{"open": "13:30", "close": "21:00"}], "2025-11-21": [{"open": "13:30", "close": "21:00"}], "2025-11-22": [{"open": "11:00", "close": "18:00"}], "2025-11-23": [{"open": "11:00", "close": "18:00"}], "2025-11-24": [{"open": "11:00", "close": "18:00"}], "2025-11-26": [{"open": "13:30", "close": "21:00"}], "2025-11-27": [{"open": "13:30", "close": "21:00"}], "2025-11-28": [{"open": "13:30", "close": "21:00"}], "2025-11-29": [{"open": "11:00", "close": "18:00"}], "2025-11-30": [{"open": "11:00", "close": "18:00"}], "2025-12-01": [{"open": "13:30", "close": "21:00"}], "2025-12-03": [{"open": "13:30", "close": "21:00"}], "2025-12-04": [{"open": "13:30", "close": "21:00"}], "2025-12-05": [{"open": "13:30", "close": "21:00"}], "2025-12-06": [{"open": "11:00", "close": "18:00"}], "2025-12-07": [{"open": "11:00", "close": "18:00"}], "2025-12-08": [{"open": "13:30", "close": "21:00"}], "2025-12-10": [{"open": "13:30", "close": "21:00"}], "2025-12-11": [{"open": "13:30", "close": "21:00"}], "2025-12-12": [{"open": "13:30", "close": "21:00"}], "2025-12-13": [{"open": "11:00", "close": "18:00"}], "2025-12-14": [{"open": "11:00", "close": "18:00"}], "2025-12-15": [{"open": "13:30", "close": "21:00"}], "2025-12-17": [{"open": "13:30", "close": "21:00"}], "2025-12-18": [{"open": "13:30", "close": "21:00"}], "2025-12-19": [{"open": "13:30", "close": "21:00"}], "2025-12-20": [{"open": "11:00", "close": "18:00"}], "2025-12-21": [{"open": "11:00", "close": "18:00"}]}, "ISLET": {"2025-01-01": [{"open": "11:00", "close": "18:00"}], "2025-01-03": [{"open": "11:00", "close": "18:00"}], "2025-01-04": [{"open": "11:00", "close": "18:00"}], "2025-01-05": [{"open": "11:00", "close": "18:00"}], "2025-01-06": [{"open": "11:00", "close": "18:00"}], "2025-01-07": [{"open": "11:00", "close": "18:00"}], "2025-01-08": [{"open": "11:00", "close": "18:00"}], "2025-01-10": [{"open": "11:00", "close": "18:00"}], "2025-01-11": [{"open": "11:00", "close": "18:00"}], "2025-01-12": [{"open": "11:00", "close": "18:00"}], "2025-01-13": [{"open": "11:00", "close": "18:00"}], "2025-01-14": [{"open": "11:00", "close": "18:00"}], "2025-01-15": [{"open": "11:00", "close": "18:00"}], "2025-01-17": [{"open": "11:00", "close": "18:00"}], "2025-01-18": [{"open": "11:00", "close": "18:00"}], "2025-01-19": [{"open": "11:00", "close": "18:00"}], "2025-01-20": [{"open": "11:00", "close": "18:00"}], "2025-01-21": [{"open": "11:00", "close": "18:00"}], "2025-01-22": [{"open": "11:00", "close": "18:00"}], "2025-01-24": [{"open": "11:00", "close": "18:00"}], "2025-01-25": [{"open": "11:00", "close": "18:00"}], "2025-01-26": [{"open": "11:00", "close": "18:00"}], "2025-01-27": [{"open": "11:00", "close": "18:00"}], "2025-01-28": [{"open": "11:00", "close": "18:00"}], "2025-01-29": [{"open": "11:00", "close": "18:00"}], "2025-01-31": [{"open": "11:00", "close": "18:00"}], "2025-02-01": [{"open": "11:00", "close": "18:00"}], "2025-02-02": [{"open": "11:00", "close": "18:00"}], "2025-02-03": [{"open": "11:00", "close": "18:00"}], "2025-02-04": [{"open": "11:00", "close": "18:00"}], "2025-02-05": [{"open": "11:00", "close": "18:00"}], "2025-02-07": [{"open": "11:00", "close": "18:00"}], "2025-02-08": [{"open": "11:00", "close": "18:00"}], "2025-02-09": [{"open": "11:00", "close": "18:00"}], "2025-02-10": [{"open": "11:00", "close": "18:00"}], "2025-02-11": [{"open": "11:00", "close": "18:00"}], "2025-02-12": [{"open": "11:00", "close": "18:00"}], "2025-02-14": [{"open": "11:00", "close": "18:00"}], "2025-02-15": [{"open": "11:00", "close": "18:00"}], "2025-02-16": [{"open": "11:00", "close": "18:00"}], "2025-02-17": [{"open": "11:00", "close": "18:00"}], "2025-02-18": [{"open": "11:00", "close": "18:00"}], "2025-02-19": [{"open": "11:00", "close": "18:00"}], "2025-02-21": [{"open": "11:00", "close": "18:00"}], "2025-02-22": [{"open": "11:00", "close": "18:00"}], "2025-02-23": [{"open": "11:00", "close": "18:00"}], "2025-02-24": [{"open": "11:00", "close": "18:00"}], "2025-02-25": [{"open": "11:00", "close": "18:00"}], "2025-02-26": [{"open": "11:00", "close": "18:00"}], "2025-02-28": [{"open": "11:00", "close": "18:00"}], "2025-03-01": [{"open": "11:00", "close": "18:00"}], "2025-03-02": [{"open": "11:00", "close": "18:00"}], "2025-03-03": [{"open": "11:00", "close": "18:00"}], "2025-03-04": [{"open": "11:00", "close": "18:00"}], "2025-03-05": [{"open": "11:00", "close": "18:00"}], "2025-03-07": [{"open": "11:00", "close": "18:00"}], "2025-03-08": [{"open": "11:00", "close": "18:00"}], "2025-03-09": [{"open": "11:00", "close": "18:00"}], "2025-03-10": [{"open": "11:00", "close": "18:00"}], "2025-03-11": [{"open": "11:00", "close": "18:00"}], "2025-03-12": [{"open": "11:00", "close": "18:00"}], "2025-03-14": [{"open": "11:00", "close": "18:00"}], "2025-03-15": [{"open": "11:00", "close": "18:00"}], "2025-03-16": [{"open": "11:00", "close": "18:00"}], "2025-03-17": [{"open": "11:00", "close": "18:00"}], "2025-03-18": [{"open": "11:00", "close": "18:00"}], "2025-03-19": [{"open": "11:00", "close": "18:00"}], "2025-03-21": [{"open": "11:00", "close": "18:00"}], "2025-03-22": [{"open": "11:00", "close": "18:00"}], "2025-03-23": [{"open": "11:00", "close": "18:00"}], "2025-03-24": [{"open": "11:00", "close": "18:00"}], "2025-03-25": [{"open": "11:00", "close": "18:00"}], "2025-03-26": [{"open": "11:00", "close": "18:00"}], "2025-03-28": [{"open": "11:00", "close": "18:00"}], "2025-03-29": [{"open": "11:00", "close": "18:00"}], "2025-03-30": [{"open": "11:00", "close": "18:00"}], "2025-03-31": [{"open": "11:00", "close": "18:00"}], "2025-04-01": [{"open": "11:00", "close": "18:00"}], "2025-04-02": [{"open": "11:00", "close": "18:00"}], "2025-04-04": [{"open": "11:00", "close": "18:00"}], "2025-04-05": [{"open": "11:00", "close": "18:00"}], "2025-04-06": [{"open": "11:00", "close": "18:00"}], "2025-04-07": [{"open": "11:00", "close": "18:00"}], "2025-04-08": [{"open": "11:00", "close": "18:00"}], "2025-04-09": [{"open": "11:00", "close": "18:00"}], "2025-04-11": [{"open": "11:00", "close": "18:00"}], "2025-04-12": [{"open": "11:00", "close": "18:00"}], "2025-04-13": [{"open": "11:00", "close": "18:00"}], "2025-04-14": [{"open": "11:00", "close": "18:00"}], "2025-04-15": [{"open": "11:00", "close": "18:00"}], "2025-04-16": [{"open": "11:00", "close": "18:00"}], "2025-04-18": [{"open": "11:00", "close": "18:00"}], "2025-04-19": [{"open": "11:00", "close": "18:00"}], "2025-04-20": [{"open": "11:00", "close": "18:00"}], "2025-04-21": [{"open": "11:00", "close": "18:00"}], "2025-04-22": [{"open": "11:00", "close": "18:00"}], "2025-04-23": [{"open": "11:00", "close": "18:00"}], "2025-04-25": [{"open": "11:00", "close": "18:00"}], "2025-04-26": [{"open": "11:00", "close": "18:00"}], "2025-04-27": [{"open": "11:00", "close": "18:00"}], "2025-04-28": [{"open": "11:00", "close": "18:00"}], "2025-04-29": [{"open": "11:00", "close": "18:00"}], "2025-04-30": [{"open": "11:00", "close": "18:00"}], "2025-05-02": [{"open": "11:00", "close": "18:00"}], "2025-05-03": [{"open": "11:00", "close": "18:00"}], "2025-05-04": [{"open": "11:00", "close": "18:00"}], "2025-05-05": [{"open": "11:00", "close": "18:00"}], "2025-05-06": [{"open": "11:00", "close": "18:00"}], "2025-05-07": [{"open": "11:00", "close": "18:00"}], "2025-05-09": [{"open": "11:00", "close": "18:00"}], "2025-05-10": [{"open": "11:00", "close": "18:00"}], "2025-05-11": [{"open": "11:00", "close": "18:00"}], "2025-05-12": [{"open": "11:00", "close": "18:00"}], "2025-05-13": [{"open": "11:00", "close": "18:00"}], "2025-05-14": [{"open": "11:00", "close": "18:00"}], "2025-05-16": [{"open": "11:00", "close": "18:00"}], "2025-05-17": [{"open": "11:00", "close": "18:00"}], "2025-05-18": [{"open": "11:00", "close": "18:00"}], "2025-05-19": [{"open": "11:00", "close": "18:00"}], "2025-05-20": [{"open": "11:00", "close": "18:00"}], "2025-05-21": [{"open": "11:00", "close": "18:00"}], "2025-05-23": [{"open": "11:00", "close": "18:00"}], "2025-05-24": [{"open": "11:00", "close": "18:00"}], "2025-05-25": [{"open": "11:00", "close": "18:00"}], "2025-05-26": [{"open": "11:00", "close": "18:00"}], "2025-05-27": [{"open": "11:00", "close": "18:00"}], "2025-05-28": [{"open": "11:00", "close": "18:00"}], "2025-05-30": [{"open": "11:00", "close": "18:00"}], "2025-05-31": [{"open": "11:00", "close": "18:00"}], "2025-06-01": [{"open": "11:00", "close": "18:00"}], "2025-06-02": [{"open": "11:00", "close": "18:00"}], "2025-06-03": [{"open": "11:00", "close": "18:00"}], "2025-06-04": [{"open": "11:00", "close": "18:00"}], "2025-06-06": [{"open": "11:00", "close": "18:00"}], "2025-06-07": [{"open": "11:00", "close": "18:00"}], "2025-06-08": [{"open": "11:00", "close": "18:00"}], "2025-06-09": [{"open": "11:00", "close": "18:00"}], "2025-06-10": [{"open": "11:00", "close": "18:00"}], "2025-06-11": [{"open": "11:00", "close": "18:00"}], "2025-06-13": [{"open": "11:00", "close": "18:00"}], "2025-06-14": [{"open": "11:00", "close": "18:00"}], "2025-06-15": [{"open": "11:00", "close": "18:00"}], "2025-06-16": [{"open": "11:00", "close": "18:00"}], "2025-06-17": [{"open": "11:00", "close": "18:00"}], "2025-06-18": [{"open": "11:00", "close": "18:00"}], "2025-06-20": [{"open": "11:00", "close": "18:00"}], "2025-06-21": [{"open": "11:00", "close": "18:00"}], "2025-06-22": [{"open": "11:00", "close": "18:00"}], "2025-06-23": [{"open": "11:00", "close": "18:00"}], "2025-06-24": [{"open": "11:00", "close": "18:00"}], "2025-06-25": [{"open": "11:00", "close": "18:00"}], "2025-06-27": [{"open": "11:00", "close": "18:00"}], "2025-06-28": [{"open": "11:00", "close": "18:00"}], "2025-06-29": [{"open": "11:00", "close": "18:00"}], "2025-06-30": [{"open": "11:00", "close": "18:00"}], "2025-07-01": [{"open": "11:00", "close": "18:00"}], "2025-07-02": [{"open": "11:00", "close": "18:00"}], "2025-07-04": [{"open": "11:00", "close": "18:00"}], "2025-07-05": [{"open": "11:00", "close": "18:00"}], "2025-07-06": [{"open": "11:00", "close": "18:00"}], "2025-07-07": [{"open": "11:00", "close": "18:00"}], "2025-07-08": [{"open": "11:00", "close": "18:00"}], "2025-07-09": [{"open": "11:00", "close": "18:00"}], "2025-07-11": [{"open": "11:00", "close": "18:00"}], "2025-07-12": [{"open": "11:00", "close": "18:00"}], "2025-07-13": [{"open": "11:00", "close": "18:00"}], "2025-07-14": [{"open": "11:00", "close": "18:00"}], "2025-07-15": [{"open": "11:00", "close": "18:00"}], "2025-07-16": [{"open": "11:00", "close": "18:00"}], "2025-07-18": [{"open": "11:00", "close": "18:00"}], "2025-07-19": [{"open": "11:00", "close": "18:00"}], "2025-07-20": [{"open": "11:00", "close": "18:00"}], "2025-07-21": [{"open": "11:00", "close": "18:00"}], "2025-07-22": [{"open": "11:00", "close": "18:00"}], "2025-07-23": [{"open": "11:00", "close": "18:00"}], "2025-07-25": [{"open": "11:00", "close": "18:00"}], "2025-07-26": [{"open": "11:00", "close": "18:00"}], "2025-07-27": [{"open": "11:00", "close": "18:00"}], "2025-07-28": [{"open": "11:00", "close": "18:00"}], "2025-07-29": [{"open": "11:00", "close": "18:00"}], "2025-07-30": [{"open": "11:00", "close": "18:00"}], "2025-08-01": [{"open": "11:00", "close": "18:00"}], "2025-08-02": [{"open": "11:00", "close": "18:00"}], "2025-08-03": [{"open": "11:00", "close": "18:00"}], "2025-08-04": [{"open": "11:00", "close": "18:00"}], "2025-08-05": [{"open": "11:00", "close": "18:00"}], "2025-08-06": [{"open": "11:00", "close": "18:00"}], "2025-08-08": [{"open": "11:00", "close": "18:00"}], "2025-08-09": [{"open": "11:00", "close": "18:00"}], "2025-08-10": [{"open": "11:00", "close": "18:00"}], "2025-08-11": [{"open": "11:00", "close": "18:00"}], "2025-08-12": [{"open": "11:00", "close": "18:00"}], "2025-08-13": [{"open": "11:00", "close": "18:00"}], "2025-08-15": [{"open": "11:00", "close": "18:00"}], "2025-08-16": [{"open": "11:00", "close": "18:00"}], "2025-08-17": [{"open": "11:00", "close": "18:00"}], "2025-08-18": [{"open": "11:00", "close": "18:00"}], "2025-08-19": [{"open": "11:00", "close": "18:00"}], "2025-08-20": [{"open": "11:00", "close": "18:00"}], "2025-08-22": [{"open": "11:00", "close": "18:00"}], "2025-08-23": [{"open": "11:00", "close": "18:00"}], "2025-08-24": [{"open": "11:00", "close": "18:00"}], "2025-08-25": [{"open": "11:00", "close": "18:00"}], "2025-08-26": [{"open": "11:00", "close": "18:00"}], "2025-08-27": [{"open": "11:00", "close": "18:00"}], "2025-08-29": [{"open": "11:00", "close": "18:00"}], "2025-08-30": [{"open": "11:00", "close": "18:00"}], "2025-08-31": [{"open": "11:00", "close": "18:00"}], "2025-09-01": [{"open": "11:00", "close": "18:00"}], "2025-09-02": [{"open": "11:00", "close": "18:00"}], "2025-09-03": [{"open": "11:00", "close": "18:00"}], "2025-09-05": [{"open": "11:00", "close": "18:00"}], "2025-09-06": [{"open": "11:00", "close": "18:00"}], "2025-09-07": [{"open": "11:00", "close": "18:00"}], "2025-09-08": [{"open": "11:00", "close": "18:00"}], "2025-09-09": [{"open": "11:00", "close": "18:00"}], "2025-09-10": [{"open": "11:00", "close": "18:00"}], "2025-09-12": [{"open": "11:00", "close": "18:00"}], "2025-09-13": [{"open": "11:00", "close": "18:00"}], "2025-09-14": [{"open": "11:00", "close": "18:00"}], "2025-09-15": [{"open": "11:00", "close": "18:00"}], "2025-09-16": [{"open": "11:00", "close": "18:00"}], "2025-09-17": [{"open": "11:00", "close": "18:00"}], "2025-09-19": [{"open": "11:00", "close": "18:00"}], "2025-09-20": [{"open": "11:00", "close": "18:00"}], "2025-09-21": [{"open": "11:00", "close": "18:00"}], "2025-09-22": [{"open": "11:00", "close": "18:00"}], "2025-09-23": [{"open": "11:00", "close": "18:00"}], "2025-09-24": [{"open": "11:00", "close": "18:00"}], "2025-09-26": [{"open": "11:00", "close": "18:00"}], "2025-09-27": [{"open": "11:00", "close": "18:00"}], "2025-09-28": [{"open": "11:00", "close": "18:00"}], "2025-09-29": [{"open": "11:00", "close": "18:00"}], "2025-09-30": [{"open": "11:00", "close": "18:00"}], "2025-10-01": [{"open": "11:00", "close": "18:00"}], "2025-10-03": [{"open": "11:00", "close": "18:00"}], "2025-10-04": [{"open": "11:00", "close": "18:00"}], "2025-10-05": [{"open": "11:00", "close": "18:00"}], "2025-10-06": [{"open": "11:00", "close": "18:00"}], "2025-10-07": [{"open": "11:00", "close": "18:00"}], "2025-10-08": [{"open": "11:00", "close": "18:00"}], "2025-10-10": [{"open": "11:00", "close": "18:00"}], "2025-10-11": [{"open": "11:00", "close": "18:00"}], "2025-10-12": [{"open": "11:00", "close": "18:00"}], "2025-10-13": [{"open": "11:00", "close": "18:00"}], "2025-10-14": [{"open": "11:00", "close": "18:00"}], "2025-10-15": [{"open": "11:00", "close": "18:00"}], "2025-10-17": [{"open": "11:00", "close": "18:00"}], "2025-10-18": [{"open": "11:00", "close": "18:00"}], "2025-10-19": [{"open": "11:00", "close": "18:00"}], "2025-10-20": [{"open": "11:00", "close": "18:00"}], "2025-10-21": [{"open": "11:00", "close": "18:00"}], "2025-10-22": [{"open": "11:00", "close": "18:00"}], "2025-10-24": [{"open": "11:00", "close": "18:00"}], "2025-10-25": [{"open": "11:00", "close": "18:00"}], "2025-10-26": [{"open": "11:00", "close": "18:00"}], "2025-10-27": [{"open": "11:00", "close": "18:00"}], "2025-10-28": [{"open": "11:00", "close": "18:00"}], "2025-10-29": [{"open": "11:00", "close": "18:00"}], "2025-10-31": [{"open": "11:00", "close": "18:00"}], "2025-11-01": [{"open": "11:00", "close": "18:00"}], "2025-11-02": [{"open": "11:00", "close": "18:00"}], "2025-11-03": [{"open": "11:00", "close": "18:00"}], "2025-11-04": [{"open": "11:00", "close": "18:00"}], "2025-11-05": [{"open": "11:00", "close": "18:00"}], "2025-11-07": [{"open": "11:00", "close": "18:00"}], "2025-11-08": [{"open": "11:00", "close": "18:00"}], "2025-11-09": [{"open": "11:00", "close": "18:00"}], "2025-11-10": [{"open": "11:00", "close": "18:00"}], "2025-11-11": [{"open": "11:00", "close": "18:00"}], "2025-11-12": [{"open": "11:00", "close": "18:00"}], "2025-11-14": [{"open": "11:00", "close": "18:00"}], "2025-11-15": [{"open": "11:00", "close": "18:00"}], "2025-11-16": [{"open": "11:00", "close": "18:00"}], "2025-11-17": [{"open": "11:00", "close": "18:00"}], "2025-11-18": [{"open": "11:00", "close": "18:00"}], "2025-11-19": [{"open": "11:00", "close": "18:00"}], "2025-11-21": [{"open": "11:00", "close": "18:00"}], "2025-11-22": [{"open": "11:00", "close": "18:00"}], "2025-11-23": [{"open": "11:00", "close": "18:00"}], "2025-11-24": [{"open": "11:00", "close": "18:00"}], "2025-11-25": [{"open": "11:00", "close": "18:00"}], "2025-11-26": [{"open": "11:00", "close": "18:00"}], "2025-11-28": [{"open": "11:00", "close": "18:00"}], "2025-11-29": [{"open": "11:00", "close": "18:00"}], "2025-11-30": [{"open": "11:00", "close": "18:00"}], "2025-12-01": [{"open": "11:00", "close": "18:00"}], "2025-12-02": [{"open": "11:00", "close": "18:00"}], "2025-12-03": [{"open": "11:00", "close": "18:00"}], "2025-12-05": [{"open": "11:00", "close": "18:00"}], "2025-12-06": [{"open": "11:00", "close": "18:00"}], "2025-12-07": [{"open": "11:00", "close": "18:00"}], "2025-12-08": [{"open": "11:00", "close": "18:00"}], "2025-12-09": [{"open": "11:00", "close": "18:00"}], "2025-12-10": [{"open": "11:00", "close": "18:00"}], "2025-12-12": [{"open": "11:00", "close": "18:00"}], "2025-12-13": [{"open": "11:00", "close": "18:00"}], "2025-12-14": [{"open": "11:00", "close": "18:00"}], "2025-12-15": [{"open": "11:00", "close": "18:00"}], "2025-12-16": [{"open": "11:00", "close": "18:00"}], "2025-12-17": [{"open": "11:00", "close": "18:00"}], "2025-12-19": [{"open": "11:00", "close": "18:00"}], "2025-12-20": [{"open": "11:00", "close": "18:00"}], "2025-12-21": [{"open": "11:00", "close": "18:00"}], "2025-12-22": [{"open": "11:00", "close": "18:00"}], "2025-12-23": [{"open": "11:00", "close": "18:00"}], "2025-12-24": [{"open": "11:00", "close": "18:00"}], "2025-12-26": [{"open": "11:00", "close": "18:00"}], "2025-12-27": [{"open": "11:00", "close": "18:00"}], "2025-12-28": [{"open": "11:00", "close": "18:00"}], "2025-12-29": [{"open": "11:00", "close": "18:00"}], "2025-12-30": [{"open": "11:00", "close": "18:00"}], "2025-12-31": [{"open": "11:00", "close": "18:00"}]}, "湘南BRUSH?": {"2025-01-01": [{"open": "09:30", "close": "21:00"}], "2025-01-02": [{"open": "12:00", "close": "22:00"}], "2025-01-03": [{"open": "12:00", "close": "22:00"}], "2025-01-04": [{"open": "09:30", "close": "21:00"}], "2025-01-05": [{"open": "09:30", "close": "21:00"}], "2025-01-06": [{"open": "12:00", "close": "22:00"}], "2025-01-07": [{"open": "12:00", "close": "22:00"}], "2025-01-08": [{"open": "12:00", "close": "22:00"}], "2025-01-09": [{"open": "12:00", "close": "22:00"}], "2025-01-10": [{"open": "12:00", "close": "22:00"}], "2025-01-11": [{"open": "09:30", "close": "21:00"}], "2025-01-12": [{"open": "09:30", "close": "21:00"}], "2025-01-13": [{"open": "09:30", "close": "21:00"}], "2025-01-14": [{"open": "12:00", "close": "22:00"}], "2025-01-15": [{"open": "12:00", "close": "22:00"}], "2025-01-16": [{"open": "12:00", "close": "22:00"}], "2025-01-17": [{"open": "12:00", "close": "22:00"}], "2025-01-18": [{"open": "09:30", "close": "21:00"}], "2025-01-19": [{"open": "09:30", "close": "21:00"}], "2025-01-20": [{"open": "12:00", "close": "22:00"}], "2025-01-21": [{"open": "12:00", "close": "22:00"}], "2025-01-22": [{"open": "12:00", "close": "22:00"}], "2025-01-23": [{"open": "12:00", "close": "22:00"}], "2025-01-24": [{"open": "12:00", "close": "22:00"}], "2025-01-25": [{"open": "09:30", "close": "21:00"}], "2025-01-26": [{"open": "09:30", "close": "21:00"}], "2025-01-27": [{"open": "12:00", "close": "22:00"}], "2025-01-28": [{"open": "12:00", "close": "22:00"}], "2025-01-29": [{"open": "12:00", "close": "22:00"}], "2025-01-30": [{"open": "12:00", "close": "22:00"}], "2025-01-31": [{"open": "12:00", "close": "22:00"}], "2025-02-01": [{"open": "09:30", "close": "21:00"}], "2025-02-02": [{"open": "09:30", "close": "21:00"}], "2025-02-03": [{"open": "12:00", "close": "22:00"}], "2025-02-04": [{"open": "12:00", "close": "22:00"}], "2025-02-05": [{"open": "12:00", "close": "22:00"}], "2025-02-06": [{"open": "12:00", "close": "22:00"}], "2025-02-07": [{"open": "12:00", "close": "22:00"}], "2025-02-08": [{"open": "09:30", "close": "21:00"}], "2025-02-09": [{"open": "09:30", "close": "21:00"}], "2025-02-10": [{"open": "12:00", "close": "22:00"}], "2025-02-11": [{"open": "09:30", "close": "21:00"}], "2025-02-12": [{"open": "12:00", "close": "22:00"}], "2025-02-13": [{"open": "12:00", "close": "22:00"}], "2025-02-14": [{"open": "12:00", "close": "22:00"}], "2025-02-15": [{"open": "09:30", "close": "21:00"}], "2025-02-16": [{"open": "09:30", "close": "21:00"}], "2025-02-17": [{"open": "12:00", "close": "22:00"}], "2025-02-18": [{"open": "12:00", "close": "22:00"}], "2025-02-19": [{"open": "12:00", "close": "22:00"}], "2025-02-20": [{"open": "12:00", "close": "22:00"}], "2025-02-21": [{"open": "12:00", "close": "22:00"}], "2025-02-22": [{"open": "09:30", "close": "21:00"}], "2025-02-23": [{"open": "09:30", "close": "21:00"}], "2025-02-24": [{"open": "09:30", "close": "21:00"}], "2025-02-25": [{"open": "12:00", "close": "22:00"}], "2025-02-26": [{"open": "12:00", "close": "22:00"}], "2025-02-27": [{"open": "12:00", "close": "22:00"}], "2025-02-28": [{"open": "12:00", "close": "22:00"}], "2025-03-01": [{"open": "09:30", "close": "21:00"}], "2025-03-02": [{"open": "09:30", "close": "21:00"}], "2025-03-03": [{"open": "12:00", "close": "22:00"}], "2025-03-04": [{"open": "12:00", "close": "22:00"}], "2025-03-05": [{"open": "12:00", "close": "22:00"}], "2025-03-06": [{"open": "12:00", "close": "22:00"}], "2025-03-07": [{"open": "12:00", "close": "22:00"}], "2025-03-08": [{"open": "09:30", "close": "21:00"}], "2025-03-09": [{"open": "09:30", "close": "21:00"}], "2025-03-10": [{"open": "12:00", "close": "22:00"}], "2025-03-11": [{"open": "12:00", "close": "22:00"}], "2025-03-12": [{"open": "12:00", "close": "22:00"}], "2025-03-13": [{"open": "12:00", "close": "22:00"}], "2025-03-14": [{"open": "12:00", "close": "22:00"}], "2025-03-15": [{"open": "09:30", "close": "21:00"}], "2025-03-16": [{"open": "09:30", "close": "21:00"}], "2025-03-17": [{"open": "12:00", "close": "22:00"}], "2025-03-18": [{"open": "12:00", "close": "22:00"}], "2025-03-19": [{"open": "12:00", "close": "22:00"}], "2025-03-20": [{"open": "09:30", "close": "21:00"}], "2025-03-21": [{"open": "12:00", "close": "22:00"}], "2025-03-22": [{"open": "09:30", "close": "21:00"}], "2025-03-23": [{"open": "09:30", "close": "21:00"}], "2025-03-24": [{"open": "12:00", "close": "22:00"}], "2025-03-25": [{"open": "12:00", "close": "22:00"}], "2025-03-26": [{"open": "12:00", "close": "22:00"}], "2025-03-27": [{"open": "12:00", "close": "22:00"}], "2025-03-28": [{"open": "12:00", "close": "22:00"}], "2025-03-29": [{"open": "09:30", "close": "21:00"}], "2025-03-30": [{"open": "09:30", "close": "21:00"}], "2025-03-31": [{"open": "12:00", "close": "22:00"}], "2025-04-01": [{"open": "12:00", "close": "22:00"}], "2025-04-02": [{"open": "12:00", "close": "22:00"}], "2025-04-03": [{"open": "12:00", "close": "22:00"}], "2025-04-04": [{"open": "12:00", "close": "22:00"}], "2025-04-05": [{"open": "09:30", "close": "21:00"}], "2025-04-06": [{"open": "09:30", "close": "21:00"}], "2025-04-07": [{"open": "12:00", "close": "22:00"}], "2025-04-08": [{"open": "12:00", "close": "22:00"}], "2025-04-09": [{"open": "12:00", "close": "22:00"}], "2025-04-10": [{"open": "12:00", "close": "22:00"}], "2025-04-11": [{"open": "12:00", "close": "22:00"}], "2025-04-12": [{"open": "09:30", "close": "21:00"}], "2025-04-13": [{"open": "09:30", "close": "21:00"}], "2025-04-14": [{"open": "12:00", "close": "22:00"}], "2025-04-15": [{"open": "12:00", "close": "22:00"}], "2025-04-16": [{"open": "12:00", "close": "22:00"}], "2025-04-17": [{"open": "12:00", "close": "22:00"}], "2025-04-18": [{"open": "12:00", "close": "22:00"}], "2025-04-19": [{"open": "09:30", "close": "21:00"}], "2025-04-20": [{"open": "09:30", "close": "21:00"}], "2025-04-21": [{"open": "12:00", "close": "22:00"}], "2025-04-22": [{"open": "12:00", "close": "22:00"}], "2025-04-23": [{"open": "12:00", "close": "22:00"}], "2025-04-24": [{"open": "12:00", "close": "22:00"}], "2025-04-25": [{"open": "12:00", "close": "22:00"}], "2025-04-26": [{"open": "09:30", "close": "21:00"}], "2025-04-27": [{"open": "09:30", "close": "21:00"}], "2025-04-28": [{"open": "12:00", "close": "22:00"}], "2025-04-29": [{"open": "09:30", "close": "21:00"}], "2025-04-30": [{"open": "12:00", "close": "22:00"}], "2025-05-01": [{"open": "12:00", "close": "22:00"}], "2025-05-02": [{"open": "12:00", "close": "22:00"}], "2025-05-03": [{"open": "09:30", "close": "21:00"}], "2025-05-04": [{"open": "09:30", "close": "21:00"}], "2025-05-05": [{"open": "09:30", "close": "21:00"}], "2025-05-06": [{"open": "09:30", "close": "21:00"}], "2025-05-07": [{"open": "12:00", "close": "22:00"}], "2025-05-08": [{"open": "12:00", "close": "22:00"}], "2025-05-09": [{"open": "12:00", "close": "22:00"}], "2025-05-10": [{"open": "09:30", "close": "21:00"}], "2025-05-11": [{"open": "09:30", "close": "21:00"}], "2025-05-12": [{"open": "12:00", "close": "22:00"}], "2025-05-13": [{"open": "12:00", "close": "22:00"}], "2025-05-14": [{"open": "12:00", "close": "22:00"}], "2025-05-15": [{"open": "12:00", "close": "22:00"}], "2025-05-16": [{"open": "12:00", "close": "22:00"}], "2025-05-17": [{"open": "09:30", "close": "21:00"}], "2025-05-18": [{"open": "09:30", "close": "21:00"}], "2025-05-19": [{"open": "12:00", "close": "22:00"}], "2025-05-20": [{"open": "12:00", "close": "22:00"}], "2025-05-21": [{"open": "12:00", "close": "22:00"}], "2025-05-22": [{"open": "12:00", "close": "22:00"}], "2025-05-23": [{"open": "12:00", "close": "22:00"}], "2025-05-24": [{"open": "09:30", "close": "21:00"}], "2025-05-25": [{"open": "09:30", "close": "21:00"}], "2025-05-26": [{"open": "12:00", "close": "22:00"}], "2025-05-27": [{"open": "12:00", "close": "22:00"}], "2025-05-28": [{"open": "12:00", "close": "22:00"}], "2025-05-29": [{"open": "12:00", "close": "22:00"}], "2025-05-30": [{"open": "12:00", "close": "22:00"}], "2025-05-31": [{"open": "09:30", "close": "21:00"}], "2025-06-01": [{"open": "09:30", "close": "21:00"}], "2025-06-02": [{"open": "12:00", "close": "22:00"}], "2025-06-03": [{"open": "12:00", "close": "22:00"}], "2025-06-04": [{"open": "12:00", "close": "22:00"}], "2025-06-05": [{"open": "12:00", "close": "22:00"}], "2025-06-06": [{"open": "12:00", "close": "22:00"}], "2025-06-07": [{"open": "09:30", "close": "21:00"}], "2025-06-08": [{"open": "09:30", "close": "21:00"}], "2025-06-09": [{"open": "12:00", "close": "22:00"}], "2025-06-10": [{"open": "12:00", "close": "22:00"}], "2025-06-11": [{"open": "12:00", "close": "22:00"}], "2025-06-12": [{"open": "12:00", "close": "22:00"}], "2025-06-13": [{"open": "12:00", "close": "22:00"}], "2025-06-14": [{"open": "09:30", "close": "21:00"}], "2025-06-15": [{"open": "09:30", "close": "21:00"}], "2025-06-16": [{"open": "12:00", "close": "22:00"}], "2025-06-17": [{"open": "12:00", "close": "22:00"}], "2025-06-18": [{"open": "12:00", "close": "22:00"}], "2025-06-19": [{"open": "12:00", "close": "22:00"}], "2025-06-20": [{"open": "12:00", "close": "22:00"}], "2025-06-21": [{"open": "09:30", "close": "21:00"}], "2025-06-22": [{"open": "09:30", "close": "21:00"}], "2025-06-23": [{"open": "12:00", "close": "22:00"}], "2025-06-24": [{"open": "12:00", "close": "22:00"}], "2025-06-25": [{"open": "12:00", "close": "22:00"}], "2025-06-26": [{"open": "12:00", "close": "22:00"}], "2025-06-27": [{"open": "12:00", "close": "22:00"}], "2025-06-28": [{"open": "09:30", "close": "21:00"}], "2025-06-29": [{"open": "09:30", "close": "21:00"}], "2025-06-30": [{"open": "12:00", "close": "22:00"}], "2025-07-01": [{"open": "12:00", "close": "22:00"}], "2025-07-02": [{"open": "12:00", "close": "22:00"}], "2025-07-03": [{"open": "12:00", "close": "22:00"}], "2025-07-04": [{"open": "12:00", "close": "22:00"}], "2025-07-05": [{"open": "09:30", "close": "21:00"}], "2025-07-06": [{"open": "09:30", "close": "21:00"}], "2025-07-07": [{"open": "12:00", "close": "22:00"}], "2025-07-08": [{"open": "12:00", "close": "22:00"}], "2025-07-09": [{"open": "12:00", "close": "22:00"}], "2025-07-10": [{"open": "12:00", "close": "22:00"}], "2025-07-11": [{"open": "12:00", "close": "22:00"}], "2025-07-12": [{"open": "09:30", "close": "21:00"}], "2025-07-13": [{"open": "09:30", "close": "21:00"}], "2025-07-14": [{"open": "12:00", "close": "22:00"}], "2025-07-15": [{"open": "12:00", "close": "22:00"}], "2025-07-16": [{"open": "12:00", "close": "22:00"}], "2025-07-17": [{"open": "12:00", "close": "22:00"}], "2025-07-18": [{"open": "12:00", "close": "22:00"}], "2025-07-19": [{"open": "09:30", "close": "21:00"}], "2025-07-20": [{"open": "09:30", "close": "21:00"}], "2025-07-21": [{"open": "09:30", "close": "21:00"}], "2025-07-22": [{"open": "12:00", "close": "22:00"}], "2025-07-23": [{"open": "12:00", "close": "22:00"}], "2025-07-24": [{"open": "12:00", "close": "22:00"}], "2025-07-25": [{"open": "12:00", "close": "22:00"}], "2025-07-26": [{"open": "09:30", "close": "21:00"}], "2025-07-27": [{"open": "09:30", "close": "21:00"}], "2025-07-28": [{"open": "12:00", "close": "22:00"}], "2025-07-29": [{"open": "12:00", "close": "22:00"}], "2025-07-30": [{"open": "12:00", "close": "22:00"}], "2025-07-31": [{"open": "12:00", "close": "22:00"}], "2025-08-01": [{"open": "12:00", "close": "22:00"}], "2025-08-02": [{"open": "09:30", "close": "21:00"}], "2025-08-03": [{"open": "09:30", "close": "21:00"}], "2025-08-04": [{"open": "12:00", "close": "22:00"}], "2025-08-05": [{"open": "12:00", "close": "22:00"}], "2025-08-06": [{"open": "12:00", "close": "22:00"}], "2025-08-07": [{"open": "12:00", "close": "22:00"}], "2025-08-08": [{"open": "12:00", "close": "22:00"}], "2025-08-09": [{"open": "09:30", "close": "21:00"}], "2025-08-10": [{"open": "09:30", "close": "21:00"}], "2025-08-11": [{"open": "09:30", "close": "21:00"}], "2025-08-12": [{"open": "12:00", "close": "22:00"}], "2025-08-13": [{"open": "12:00", "close": "22:00"}], "2025-08-14": [{"open": "12:00", "close": "22:00"}], "2025-08-15": [{"open": "12:00", "close": "22:00"}], "2025-08-16": [{"open": "09:30", "close": "21:00"}], "2025-08-17": [{"open": "09:30", "close": "21:00"}], "2025-08-18": [{"open": "12:00", "close": "22:00"}], "2025-08-19": [{"open": "12:00", "close": "22:00"}], "2025-08-20": [{"open": "12:00", "close": "22:00"}], "2025-08-21": [{"open": "12:00", "close": "22:00"}], "2025-08-22": [{"open": "12:00", "close": "22:00"}], "2025-08-23": [{"open": "09:30", "close": "21:00"}], "2025-08-24": [{"open": "09:30", "close": "21:00"}], "2025-08-25": [{"open": "12:00", "close": "22:00"}], "2025-08-26": [{"open": "12:00", "close": "22:00"}], "2025-08-27": [{"open": "12:00", "close": "22:00"}], "2025-08-28": [{"open": "12:00", "close": "22:00"}], "2025-08-29": [{"open": "12:00", "close": "22:00"}], "2025-08-30": [{"open": "09:30", "close": "21:00"}], "2025-08-31": [{"open": "09:30", "close": "21:00"}], "2025-09-01": [{"open": "12:00", "close": "22:00"}], "2025-09-02": [{"open": "12:00", "close": "22:00"}], "2025-09-03": [{"open": "12:00", "close": "22:00"}], "2025-09-04": [{"open": "12:00", "close": "22:00"}], "2025-09-05": [{"open": "12:00", "close": "22:00"}], "2025-09-06": [{"open": "09:30", "close": "21:00"}], "2025-09-07": [{"open": "09:30", "close": "21:00"}], "2025-09-08": [{"open": "12:00", "close": "22:00"}], "2025-09-09": [{"open": "12:00", "close": "22:00"}], "2025-09-10": [{"open": "12:00", "close": "22:00"}], "2025-09-11": [{"open": "12:00", "close": "22:00"}], "2025-09-12": [{"open": "12:00", "close": "22:00"}], "2025-09-13": [{"open": "09:30", "close": "21:00"}], "2025-09-14": [{"open": "09:30", "close": "21:00"}], "2025-09-15": [{"open": "09:30", "close": "21:00"}], "2025-09-16": [{"open": "12:00", "close": "22:00"}], "2025-09-17": [{"open": "12:00", "close": "22:00"}], "2025-09-18": [{"open": "12:00", "close": "22:00"}], "2025-09-19": [{"open": "12:00", "close": "22:00"}], "2025-09-20": [{"open": "09:30", "close": "21:00"}], "2025-09-21": [{"open": "09:30", "close": "21:00"}], "2025-09-22": [{"open": "12:00", "close": "22:00"}], "2025-09-23": [{"open": "09:30", "close": "21:00"}], "2025-09-24": [{"open": "12:00", "close": "22:00"}], "2025-09-25": [{"open": "12:00", "close": "22:00"}], "2025-09-26": [{"open": "12:00", "close": "22:00"}], "2025-09-27": [{"open": "09:30", "close": "21:00"}], "2025-09-28": [{"open": "09:30", "close": "21:00"}], "2025-09-29": [{"open": "12:00", "close": "22:00"}], "2025-09-30": [{"open": "12:00", "close": "22:00"}], "2025-10-01": [{"open": "12:00", "close": "22:00"}], "2025-10-02": [{"open": "12:00", "close": "22:00"}], "2025-10-03": [{"open": "12:00", "close": "22:00"}], "2025-10-04": [{"open": "09:30", "close": "21:00"}], "2025-10-05": [{"open": "09:30", "close": "21:00"}], "2025-10-06": [{"open": "12:00", "close": "22:00"}], "2025-10-07": [{"open": "12:00", "close": "22:00"}], "2025-10-08": [{"open": "12:00", "close": "22:00"}], "2025-10-09": [{"open": "12:00", "close": "22:00"}], "2025-10-10": [{"open": "12:00", "close": "22:00"}], "2025-10-11": [{"open": "09:30", "close": "21:00"}], "2025-10-12": [{"open": "09:30", "close": "21:00"}], "2025-10-13": [{"open": "09:30", "close": "21:00"}], "2025-10-14": [{"open": "12:00", "close": "22:00"}], "2025-10-15": [{"open": "12:00", "close": "22:00"}], "2025-10-16": [{"open": "12:00", "close": "22:00"}], "2025-10-17": [{"open": "12:00", "close": "22:00"}], "2025-10-18": [{"open": "09:30", "close": "21:00"}], "2025-10-19": [{"open": "09:30", "close": "21:00"}], "2025-10-20": [{"open": "12:00", "close": "22:00"}], "2025-10-21": [{"open": "12:00", "close": "22:00"}], "2025-10-22": [{"open": "12:00", "close": "22:00"}], "2025-10-23": [{"open": "12:00", "close": "22:00"}], "2025-10-24": [{"open": "12:00", "close": "22:00"}], "2025-10-25": [{"open": "09:30", "close": "21:00"}], "2025-10-26": [{"open": "09:30", "close": "21:00"}], "2025-10-27": [{"open": "12:00", "close": "22:00"}], "2025-10-28": [{"open": "12:00", "close": "22:00"}], "2025-10-29": [{"open": "12:00", "close": "22:00"}], "2025-10-30": [{"open": "12:00", "close": "22:00"}], "2025-10-31": [{"open": "12:00", "close": "22:00"}], "2025-11-01": [{"open": "09:30", "close": "21:00"}], "2025-11-02": [{"open": "09:30", "close": "21:00"}], "2025-11-03": [{"open": "09:30", "close": "21:00"}], "2025-11-04": [{"open": "12:00", "close": "22:00"}], "2025-11-05": [{"open": "12:00", "close": "22:00"}], "2025-11-06": [{"open": "12:00", "close": "22:00"}], "2025-11-07": [{"open": "12:00", "close": "22:00"}], "2025-11-08": [{"open": "09:30", "close": "21:00"}], "2025-11-09": [{"open": "09:30", "close": "21:00"}], "2025-11-10": [{"open": "12:00", "close": "22:00"}], "2025-11-11": [{"open": "12:00", "close": "22:00"}], "2025-11-12": [{"open": "12:00", "close": "22:00"}], "2025-11-13": [{"open": "12:00", "close": "22:00"}], "2025-11-14": [{"open": "12:00", "close": "22:00"}], "2025-11-15": [{"open": "09:30", "close": "21:00"}], "2025-11-16": [{"open": "09:30", "close": "21:00"}], "2025-11-17": [{"open": "12:00", "close": "22:00"}], "2025-11-18": [{"open": "12:00", "close": "22:00"}], "2025-11-19": [{"open": "12:00", "close": "22:00"}], "2025-11-20": [{"open": "12:00", "close": "22:00"}], "2025-11-21": [{"open": "12:00", "close": "22:00"}], "2025-11-22": [{"open": "09:30", "close": "21:00"}], "2025-11-23": [{"open": "09:30", "close": "21:00"}], "2025-11-24": [{"open": "09:30", "close": "21:00"}], "2025-11-25": [{"open": "12:00", "close": "22:00"}], "2025-11-26": [{"open": "12:00", "close": "22:00"}], "2025-11-27": [{"open": "12:00", "close": "22:00"}], "2025-11-28": [{"open": "12:00", "close": "22:00"}], "2025-11-29": [{"open": "09:30", "close": "21:00"}], "2025-11-30": [{"open": "09:30", "close": "21:00"}], "2025-12-01": [{"open": "12:00", "close": "22:00"}], "2025-12-02": [{"open": "12:00", "close": "22:00"}], "2025-12-03": [{"open": "12:00", "close": "22:00"}], "2025-12-04": [{"open": "12:00", "close": "22:00"}], "2025-12-05": [{"open": "12:00", "close": "22:00"}], "2025-12-06": [{"open": "09:30", "close": "21:00"}], "2025-12-07": [{"open": "09:30", "close": "21:00"}], "2025-12-08": [{"open": "12:00", "close": "22:00"}], "2025-12-09": [{"open": "12:00", "close": "22:00"}], "2025-12-10": [{"open": "12:00", "close": "22:00"}], "2025-12-11": [{"open": "12:00", "close": "22:00"}], "2025-12-12": [{"open": "12:00", "close": "22:00"}], "2025-12-13": [{"open": "09:30", "close": "21:00"}], "2025-12-14": [{"open": "09:30", "close": "21:00"}], "2025-12-15": [{"open": "12:00", "close": "22:00"}], "2025-12-16": [{"open": "12:00", "close": "22:00"}], "2025-12-17": [{"open": "12:00", "close": "22:00"}], "2025-12-18": [{"open": "12:00", "close": "22:00"}], "2025-12-19": [{"open": "12:00", "close": "22:00"}], "2025-12-20": [{"open": "09:30", "close": "21:00"}], "2025-12-21": [{"open": "09:30", "close": "21:00"}], "2025-12-22": [{"open": "12:00", "close": "22:00"}], "2025-12-23": [{"open": "12:00", "close": "22:00"}], "2025-12-24": [{"open": "12:00", "close": "22:00"}], "2025-12-25": [{"open": "12:00", "close": "22:00"}], "2025-12-26": [{"open": "12:00", "close": "22:00"}], "2025-12-27": [{"open": "09:30", "close": "21:00"}], "2025-12-28": [{"open": "09:30", "close": "21:00"}], "2025-12-29": [{"open": "12:00", "close": "22:00"}], "2025-12-30": [{"open": "12:00", "close": "22:00"}], "2025-12-31": [{"open": "12:00", "close": "22:00"}]}, "埼玉BRUSH?": {"2025-01-01": [{"open": "09:30", "close": "21:00"}], "2025-01-02": [{"open": "12:00", "close": "22:00"}], "2025-01-03": [{"open": "12:00", "close": "22:00"}], "2025-01-04": [{"open": "09:30", "close": "21:00"}], "2025-01-05": [{"open": "09:30", "close": "21:00"}], "2025-01-06": [{"open": "12:00", "close": "22:00"}], "2025-01-07": [{"open": "12:00", "close": "22:00"}], "2025-01-08": [{"open": "12:00", "close": "22:00"}], "2025-01-09": [{"open": "12:00", "close": "22:00"}], "2025-01-10": [{"open": "12:00", "close": "22:00"}], "2025-01-11": [{"open": "09:30", "close": "21:00"}], "2025-01-12": [{"open": "09:30", "close": "21:00"}], "2025-01-13": [{"open": "09:30", "close": "21:00"}], "2025-01-14": [{"open": "12:00", "close": "22:00"}], "2025-01-15": [{"open": "12:00", "close": "22:00"}], "2025-01-16": [{"open": "12:00", "close": "22:00"}], "2025-01-17": [{"open": "12:00", "close": "22:00"}], "2025-01-18": [{"open": "09:30", "close": "21:00"}], "2025-01-19": [{"open": "09:30", "close": "21:00"}], "2025-01-20": [{"open": "12:00", "close": "22:00"}], "2025-01-21": [{"open": "12:00", "close": "22:00"}], "2025-01-22": [{"open": "12:00", "close": "22:00"}], "2025-01-23": [{"open": "12:00", "close": "22:00"}], "2025-01-24": [{"open": "12:00", "close": "22:00"}], "2025-01-25": [{"open": "09:30", "close": "21:00"}], "2025-01-26": [{"open": "09:30", "close": "21:00"}], "2025-01-27": [{"open": "12:00", "close": "22:00"}], "2025-01-28": [{"open": "12:00", "close": "22:00"}], "2025-01-29": [{"open": "12:00", "close": "22:00"}], "2025-01-30": [{"open": "12:00", "close": "22:00"}], "2025-01-31": [{"open": "12:00", "close": "22:00"}], "2025-02-01": [{"open": "09:30", "close": "21:00"}], "2025-02-02": [{"open": "09:30", "close": "21:00"}], "2025-02-03": [{"open": "12:00", "close": "22:00"}], "2025-02-04": [{"open": "12:00", "close": "22:00"}], "2025-02-05": [{"open": "12:00", "close": "22:00"}], "2025-02-06": [{"open": "12:00", "close": "22:00"}], "2025-02-07": [{"open": "12:00", "close": "22:00"}], "2025-02-08": [{"open": "09:30", "close": "21:00"}], "2025-02-09": [{"open": "09:30", "close": "21:00"}], "2025-02-10": [{"open": "12:00", "close": "22:00"}], "2025-02-11": [{"open": "09:30", "close": "21:00"}], "2025-02-12": [{"open": "12:00", "close": "22:00"}], "2025-02-13": [{"open": "12:00", "close": "22:00"}], "2025-02-14": [{"open": "12:00", "close": "22:00"}], "2025-02-15": [{"open": "09:30", "close": "21:00"}], "2025-02-16": [{"open": "09:30", "close": "21:00"}], "2025-02-17": [{"open": "12:00", "close": "22:00"}], "2025-02-18": [{"open": "12:00", "close": "22:00"}], "2025-02-19": [{"open": "12:00", "close": "22:00"}], "2025-02-20": [{"open": "12:00", "close": "22:00"}], "2025-02-21": [{"open": "12:00", "close": "22:00"}], "2025-02-22": [{"open": "09:30", "close": "21:00"}], "2025-02-23": [{"open": "09:30", "close": "21:00"}], "2025-02-24": [{"open": "09:30", "close": "21:00"}], "2025-02-25": [{"open": "12:00", "close": "22:00"}], "2025-02-26": [{"open": "12:00", "close": "22:00"}], "2025-02-27": [{"open": "12:00", "close": "22:00"}], "2025-02-28": [{"open": "12:00", "close": "22:00"}], "2025-03-01": [{"open": "09:30", "close": "21:00"}], "2025-03-02": [{"open": "09:30", "close": "21:00"}], "2025-03-03": [{"open": "12:00", "close": "22:00"}], "2025-03-04": [{"open": "12:00", "close": "22:00"}], "2025-03-05": [{"open": "12:00", "close": "22:00"}], "2025-03-06": [{"open": "12:00", "close": "22:00"}], "2025-03-07": [{"open": "12:00", "close": "22:00"}], "2025-03-08": [{"open": "09:30", "close": "21:00"}], "2025-03-09": [{"open": "09:30", "close": "21:00"}], "2025-03-10": [{"open": "12:00", "close": "22:00"}], "2025-03-11": [{"open": "12:00", "close": "22:00"}], "2025-03-12": [{"open": "12:00", "close": "22:00"}], "2025-03-13": [{"open": "12:00", "close": "22:00"}], "2025-03-14": [{"open": "12:00", "close": "22:00"}], "2025-03-15": [{"open": "09:30", "close": "21:00"}], "2025-03-16": [{"open": "09:30", "close": "21:00"}], "2025-03-17": [{"open": "12:00", "close": "22:00"}], "2025-03-18": [{"open": "12:00", "close": "22:00"}], "2025-03-19": [{"open": "12:00", "close": "22:00"}], "2025-03-20": [{"open": "09:30", "close": "21:00"}], "2025-03-21": [{"open": "12:00", "close": "22:00"}], "2025-03-22": [{"open": "09:30", "close": "21:00"}], "2025-03-23": [{"open": "09:30", "close": "21:00"}], "2025-03-24": [{"open": "12:00", "close": "22:00"}], "2025-03-25": [{"open": "12:00", "close": "22:00"}], "2025-03-26": [{"open": "12:00", "close": "22:00"}], "2025-03-27": [{"open": "12:00", "close": "22:00"}], "2025-03-28": [{"open": "12:00", "close": "22:00"}], "2025-03-29": [{"open": "09:30", "close": "21:00"}], "2025-03-30": [{"open": "09:30", "close": "21:00"}], "2025-03-31": [{"open": "12:00", "close": "22:00"}], "2025-04-01": [{"open": "12:00", "close": "22:00"}], "2025-04-02": [{"open": "12:00", "close": "22:00"}], "2025-04-03": [{"open": "12:00", "close": "22:00"}], "2025-04-04": [{"open": "12:00", "close": "22:00"}], "2025-04-05": [{"open": "09:30", "close": "21:00"}], "2025-04-06": [{"open": "09:30", "close": "21:00"}], "2025-04-07": [{"open": "12:00", "close": "22:00"}], "2025-04-08": [{"open": "12:00", "close": "22:00"}], "2025-04-09": [{"open": "12:00", "close": "22:00"}], "2025-04-10": [{"open": "12:00", "close": "22:00"}], "2025-04-11": [{"open": "12:00", "close": "22:00"}], "2025-04-12": [{"open": "09:30", "close": "21:00"}], "2025-04-13": [{"open": "09:30", "close": "21:00"}], "2025-04-14": [{"open": "12:00", "close": "22:00"}], "2025-04-15": [{"open": "12:00", "close": "22:00"}], "2025-04-16": [{"open": "12:00", "close": "22:00"}], "2025-04-17": [{"open": "12:00", "close": "22:00"}], "2025-04-18": [{"open": "12:00", "close": "22:00"}], "2025-04-19": [{"open": "09:30", "close": "21:00"}], "2025-04-20": [{"open": "09:30", "close": "21:00"}], "2025-04-21": [{"open": "12:00", "close": "22:00"}], "2025-04-22": [{"open": "12:00", "close": "22:00"}], "2025-04-23": [{"open": "12:00", "close": "22:00"}], "2025-04-24": [{"open": "12:00", "close": "22:00"}], "2025-04-25": [{"open": "12:00", "close": "22:00"}], "2025-04-26": [{"open": "09:30", "close": "21:00"}], "2025-04-27": [{"open": "09:30", "close": "21:00"}], "2025-04-28": [{"open": "12:00", "close": "22:00"}], "2025-04-29": [{"open": "09:30", "close": "21:00"}], "2025-04-30": [{"open": "12:00", "close": "22:00"}], "2025-05-01": [{"open": "12:00", "close": "22:00"}], "2025-05-02": [{"open": "12:00", "close": "22:00"}], "2025-05-03": [{"open": "09:30", "close": "21:00"}], "2025-05-04": [{"open": "09:30", "close": "21:00"}], "2025-05-05": [{"open": "09:30", "close": "21:00"}], "2025-05-06": [{"open": "09:30", "close": "21:00"}], "2025-05-07": [{"open": "12:00", "close": "22:00"}], "2025-05-08": [{"open": "12:00", "close": "22:00"}], "2025-05-09": [{"open": "12:00", "close": "22:00"}], "2025-05-10": [{"open": "09:30", "close": "21:00"}], "2025-05-11": [{"open": "09:30", "close": "21:00"}], "2025-05-12": [{"open": "12:00", "close": "22:00"}], "2025-05-13": [{"open": "12:00", "close": "22:00"}], "2025-05-14": [{"open": "12:00", "close": "22:00"}], "2025-05-15": [{"open": "12:00", "close": "22:00"}], "2025-05-16": [{"open": "12:00", "close": "22:00"}], "2025-05-17": [{"open": "09:30", "close": "21:00"}], "2025-05-18": [{"open": "09:30", "close": "21:00"}], "2025-05-19": [{"open": "12:00", "close": "22:00"}], "2025-05-20": [{"open": "12:00", "close": "22:00"}], "2025-05-21": [{"open": "12:00", "close": "22:00"}], "2025-05-22": [{"open": "12:00", "close": "22:00"}], "2025-05-23": [{"open": "12:00", "close": "22:00"}], "2025-05-24": [{"open": "09:30", "close": "21:00"}], "2025-05-25": [{"open": "09:30", "close": "21:00"}], "2025-05-26": [{"open": "12:00", "close": "22:00"}], "2025-05-27": [{"open": "12:00", "close": "22:00"}], "2025-05-28": [{"open": "12:00", "close": "22:00"}], "2025-05-29": [{"open": "12:00", "close": "22:00"}], "2025-05-30": [{"open": "12:00", "close": "22:00"}], "2025-05-31": [{"open": "09:30", "close": "21:00"}], "2025-06-01": [{"open": "09:30", "close": "21:00"}], "2025-06-02": [{"open": "12:00", "close": "22:00"}], "2025-06-03": [{"open": "12:00", "close": "22:00"}], "2025-06-04": [{"open": "12:00", "close": "22:00"}], "2025-06-05": [{"open": "12:00", "close": "22:00"}], "2025-06-06": [{"open": "12:00", "close": "22:00"}], "2025-06-07": [{"open": "09:30", "close": "21:00"}], "2025-06-08": [{"open": "09:30", "close": "21:00"}], "2025-06-09": [{"open": "12:00", "close": "22:00"}], "2025-06-10": [{"open": "12:00", "close": "22:00"}], "2025-06-11": [{"open": "12:00", "close": "22:00"}], "2025-06-12": [{"open": "12:00", "close": "22:00"}], "2025-06-13": [{"open": "12:00", "close": "22:00"}], "2025-06-14": [{"open": "09:30", "close": "21:00"}], "2025-06-15": [{"open": "09:30", "close": "21:00"}], "2025-06-16": [{"open": "12:00", "close": "22:00"}], "2025-06-17": [{"open": "12:00", "close": "22:00"}], "2025-06-18": [{"open": "12:00", "close": "22:00"}], "2025-06-19": [{"open": "12:00", "close": "22:00"}], "2025-06-20": [{"open": "12:00", "close": "22:00"}], "2025-06-21": [{"open": "09:30", "close": "21:00"}], "2025-06-22": [{"open": "09:30", "close": "21:00"}], "2025-06-23": [{"open": "12:00", "close": "22:00"}], "2025-06-24": [{"open": "12:00", "close": "22:00"}], "2025-06-25": [{"open": "12:00", "close": "22:00"}], "2025-06-26": [{"open": "12:00", "close": "22:00"}], "2025-06-27": [{"open": "12:00", "close": "22:00"}], "2025-06-28": [{"open": "09:30", "close": "21:00"}], "2025-06-29": [{"open": "09:30", "close": "21:00"}], "2025-06-30": [{"open": "12:00", "close": "22:00"}], "2025-07-01": [{"open": "12:00", "close": "22:00"}], "2025-07-02": [{"open": "12:00", "close": "22:00"}], "2025-07-03": [{"open": "12:00", "close": "22:00"}], "2025-07-04": [{"open": "12:00", "close": "22:00"}], "2025-07-05": [{"open": "09:30", "close": "21:00"}], "2025-07-06": [{"open": "09:30", "close": "21:00"}], "2025-07-07": [{"open": "12:00", "close": "22:00"}], "2025-07-08": [{"open": "12:00", "close": "22:00"}], "2025-07-09": [{"open": "12:00", "close": "22:00"}], "2025-07-10": [{"open": "12:00", "close": "22:00"}], "2025-07-11": [{"open": "12:00", "close": "22:00"}], "2025-07-12": [{"open": "09:30", "close": "21:00"}], "2025-07-13": [{"open": "09:30", "close": "21:00"}], "2025-07-14": [{"open": "12:00", "close": "22:00"}], "2025-07-15": [{"open": "12:00", "close": "22:00"}], "2025-07-16": [{"open": "12:00", "close": "22:00"}], "2025-07-17": [{"open": "12:00", "close": "22:00"}], "2025-07-18": [{"open": "12:00", "close": "22:00"}], "2025-07-19": [{"open": "09:30", "close": "21:00"}], "2025-07-20": [{"open": "09:30", "close": "21:00"}], "2025-07-21": [{"open": "09:30", "close": "21:00"}], "2025-07-22": [{"open": "12:00", "close": "22:00"}], "2025-07-23": [{"open": "12:00", "close": "22:00"}], "2025-07-24": [{"open": "12:00", "close": "22:00"}], "2025-07-25": [{"open": "12:00", "close": "22:00"}], "2025-07-26": [{"open": "09:30", "close": "21:00"}], "2025-07-27": [{"open": "09:30", "close": "21:00"}], "2025-07-28": [{"open": "12:00", "close": "22:00"}], "2025-07-29": [{"open": "12:00", "close": "22:00"}], "2025-07-30": [{"open": "12:00", "close": "22:00"}], "2025-07-31": [{"open": "12:00", "close": "22:00"}], "2025-08-01": [{"open": "12:00", "close": "22:00"}], "2025-08-02": [{"open": "09:30", "close": "21:00"}], "2025-08-03": [{"open": "09:30", "close": "21:00"}], "2025-08-04": [{"open": "12:00", "close": "22:00"}], "2025-08-05": [{"open": "12:00", "close": "22:00"}], "2025-08-06": [{"open": "12:00", "close": "22:00"}], "2025-08-07": [{"open": "12:00", "close": "22:00"}], "2025-08-08": [{"open": "12:00", "close": "22:00"}], "2025-08-09": [{"open": "09:30", "close": "21:00"}], "2025-08-10": [{"open": "09:30", "close": "21:00"}], "2025-08-11": [{"open": "09:30", "close": "21:00"}], "2025-08-12": [{"open": "12:00", "close": "22:00"}], "2025-08-13": [{"open": "12:00", "close": "22:00"}], "2025-08-14": [{"open": "12:00", "close": "22:00"}], "2025-08-15": [{"open": "12:00", "close": "22:00"}], "2025-08-16": [{"open": "09:30", "close": "21:00"}], "2025-08-17": [{"open": "09:30", "close": "21:00"}], "2025-08-18": [{"open": "12:00", "close": "22:00"}], "2025-08-19": [{"open": "12:00", "close": "22:00"}], "2025-08-20": [{"open": "12:00", "close": "22:00"}], "2025-08-21": [{"open": "12:00", "close": "22:00"}], "2025-08-22": [{"open": "12:00", "close": "22:00"}], "2025-08-23": [{"open": "09:30", "close": "21:00"}], "2025-08-24": [{"open": "09:30", "close": "21:00"}], "2025-08-25": [{"open": "12:00", "close": "22:00"}], "2025-08-26": [{"open": "12:00", "close": "22:00"}], "2025-08-27": [{"open": "12:00", "close": "22:00"}], "2025-08-28": [{"open": "12:00", "close": "22:00"}], "2025-08-29": [{"open": "12:00", "close": "22:00"}], "2025-08-30": [{"open": "09:30", "close": "21:00"}], "2025-08-31": [{"open": "09:30", "close": "21:00"}], "2025-09-01": [{"open": "12:00", "close": "22:00"}], "2025-09-02": [{"open": "12:00", "close": "22:00"}], "2025-09-03": [{"open": "12:00", "close": "22:00"}], "2025-09-04": [{"open": "12:00", "close": "22:00"}], "2025-09-05": [{"open": "12:00", "close": "22:00"}], "2025-09-06": [{"open": "09:30", "close": "21:00"}], "2025-09-07": [{"open": "09:30", "close": "21:00"}], "2025-09-08": [{"open": "12:00", "close": "22:00"}], "2025-09-09": [{"open": "12:00", "close": "22:00"}], "2025-09-10": [{"open": "12:00", "close": "22:00"}], "2025-09-11": [{"open": "12:00", "close": "22:00"}], "2025-09-12": [{"open": "12:00", "close": "22:00"}], "2025-09-13": [{"open": "09:30", "close": "21:00"}], "2025-09-14": [{"open": "09:30", "close": "21:00"}], "2025-09-15": [{"open": "09:30", "close": "21:00"}], "2025-09-16": [{"open": "12:00", "close": "22:00"}], "2025-09-17": [{"open": "12:00", "close": "22:00"}], "2025-09-18": [{"open": "12:00", "close": "22:00"}], "2025-09-19": [{"open": "12:00", "close": "22:00"}], "2025-09-20": [{"open": "09:30", "close": "21:00"}], "2025-09-21": [{"open": "09:30", "close": "21:00"}], "2025-09-22": [{"open": "12:00", "close": "22:00"}], "2025-09-23": [{"open": "09:30", "close": "21:00"}], "2025-09-24": [{"open": "12:00", "close": "22:00"}], "2025-09-25": [{"open": "12:00", "close": "22:00"}], "2025-09-26": [{"open": "12:00", "close": "22:00"}], "2025-09-27": [{"open": "09:30", "close": "21:00"}], "2025-09-28": [{"open": "09:30", "close": "21:00"}], "2025-09-29": [{"open": "12:00", "close": "22:00"}], "2025-09-30": [{"open": "12:00", "close": "22:00"}], "2025-10-01": [{"open": "12:00", "close": "22:00"}], "2025-10-02": [{"open": "12:00", "close": "22:00"}], "2025-10-03": [{"open": "12:00", "close": "22:00"}], "2025-10-04": [{"open": "09:30", "close": "21:00"}], "2025-10-05": [{"open": "09:30", "close": "21:00"}], "2025-10-06": [{"open": "12:00", "close": "22:00"}], "2025-10-07": [{"open": "12:00", "close": "22:00"}], "2025-10-08": [{"open": "12:00", "close": "22:00"}], "2025-10-09": [{"open": "12:00", "close": "22:00"}], "2025-10-10": [{"open": "12:00", "close": "22:00"}], "2025-10-11": [{"open": "09:30", "close": "21:00"}], "2025-10-12": [{"open": "09:30", "close": "21:00"}], "2025-10-13": [{"open": "09:30", "close": "21:00"}], "2025-10-14": [{"open": "12:00", "close": "22:00"}], "2025-10-15": [{"open": "12:00", "close": "22:00"}], "2025-10-16": [{"open": "12:00", "close": "22:00"}], "2025-10-17": [{"open": "12:00", "close": "22:00"}], "2025-10-18": [{"open": "09:30", "close": "21:00"}], "2025-10-19": [{"open": "09:30", "close": "21:00"}], "2025-10-20": [{"open": "12:00", "close": "22:00"}], "2025-10-21": [{"open": "12:00", "close": "22:00"}], "2025-10-22": [{"open": "12:00", "close": "22:00"}], "2025-10-23": [{"open": "12:00", "close": "22:00"}], "2025-10-24": [{"open": "12:00", "close": "22:00"}], "2025-10-25": [{"open": "09:30", "close": "21:00"}], "2025-10-26": [{"open": "09:30", "close": "21:00"}], "2025-10-27": [{"open": "12:00", "close": "22:00"}], "2025-10-28": [{"open": "12:00", "close": "22:00"}], "2025-10-29": [{"open": "12:00", "close": "22:00"}], "2025-10-30": [{"open": "12:00", "close": "22:00"}], "2025-10-31": [{"open": "12:00", "close": "22:00"}], "2025-11-01": [{"open": "09:30", "close": "21:00"}], "2025-11-02": [{"open": "09:30", "close": "21:00"}], "2025-11-03": [{"open": "09:30", "close": "21:00"}], "2025-11-04": [{"open": "12:00", "close": "22:00"}], "2025-11-05": [{"open": "12:00", "close": "22:00"}], "2025-11-06": [{"open": "12:00", "close": "22:00"}], "2025-11-07": [{"open": "12:00", "close": "22:00"}], "2025-11-08": [{"open": "09:30", "close": "21:00"}], "2025-11-09": [{"open": "09:30", "close": "21:00"}], "2025-11-10": [{"open": "12:00", "close": "22:00"}], "2025-11-11": [{"open": "12:00", "close": "22:00"}], "2025-11-12": [{"open": "12:00", "close": "22:00"}], "2025-11-13": [{"open": "12:00", "close": "22:00"}], "2025-11-14": [{"open": "12:00", "close": "22:00"}], "2025-11-15": [{"open": "09:30", "close": "21:00"}], "2025-11-16": [{"open": "09:30", "close": "21:00"}], "2025-11-17": [{"open": "12:00", "close": "22:00"}], "2025-11-18": [{"open": "12:00", "close": "22:00"}], "2025-11-19": [{"open": "12:00", "close": "22:00"}], "2025-11-20": [{"open": "12:00", "close": "22:00"}], "2025-11-21": [{"open": "12:00", "close": "22:00"}], "2025-11-22": [{"open": "09:30", "close": "21:00"}], "2025-11-23": [{"open": "09:30", "close": "21:00"}], "2025-11-24": [{"open": "09:30", "close": "21:00"}], "2025-11-25": [{"open": "12:00", "close": "22:00"}], "2025-11-26": [{"open": "12:00", "close": "22:00"}], "2025-11-27": [{"open": "12:00", "close": "22:00"}], "2025-11-28": [{"open": "12:00", "close": "22:00"}], "2025-11-29": [{"open": "09:30", "close": "21:00"}], "2025-11-30": [{"open": "09:30", "close": "21:00"}], "2025-12-01": [{"open": "12:00", "close": "22:00"}], "2025-12-02": [{"open": "12:00", "close": "22:00"}], "2025-12-03": [{"open": "12:00", "close": "22:00"}], "2025-12-04": [{"open": "12:00", "close": "22:00"}], "2025-12-05": [{"open": "12:00", "close": "22:00"}], "2025-12-06": [{"open": "09:30", "close": "21:00"}], "2025-12-07": [{"open": "09:30", "close": "21:00"}], "2025-12-08": [{"open": "12:00", "close": "22:00"}], "2025-12-09": [{"open": "12:00", "close": "22:00"}], "2025-12-10": [{"open": "12:00", "close": "22:00"}], "2025-12-11": [{"open": "12:00", "close": "22:00"}], "2025-12-12": [{"open": "12:00", "close": "22:00"}], "2025-12-13": [{"open": "09:30", "close": "21:00"}], "2025-12-14": [{"open": "09:30", "close": "21:00"}], "2025-12-15": [{"open": "12:00", "close": "22:00"}], "2025-12-16": [{"open": "12:00", "close": "22:00"}], "2025-12-17": [{"open": "12:00", "close": "22:00"}], "2025-12-18": [{"open": "12:00", "close": "22:00"}], "2025-12-19": [{"open": "12:00", "close": "22:00"}], "2025-12-20": [{"open": "09:30", "close": "21:00"}], "2025-12-21": [{"open": "09:30", "close": "21:00"}], "2025-12-22": [{"open": "12:00", "close": "22:00"}], "2025-12-23": [{"open": "12:00", "close": "22:00"}], "2025-12-24": [{"open": "12:00", "close": "22:00"}], "2025-12-25": [{"open": "12:00", "close": "22:00"}], "2025-12-26": [{"open": "12:00", "close": "22:00"}], "2025-12-27": [{"open": "09:30", "close": "21:00"}], "2025-12-28": [{"open": "09:30", "close": "21:00"}], "2025-12-29": [{"open": "12:00", "close": "22:00"}], "2025-12-30": [{"open": "12:00", "close": "22:00"}], "2025-12-31": [{"open": "12:00", "close": "22:00"}]}, "長野BRUSH?": {"2025-01-01": [{"open": "09:30", "close": "20:00"}], "2025-01-02": [{"open": "17:30", "close": "22:30"}], "2025-01-04": [{"open": "09:30", "close": "20:00"}], "2025-01-05": [{"open": "09:30", "close": "20:00"}], "2025-01-06": [{"open": "17:30", "close": "22:30"}], "2025-01-07": [{"open": "17:30", "close": "22:30"}], "2025-01-08": [{"open": "17:30", "close": "22:30"}], "2025-01-09": [{"open": "17:30", "close": "22:30"}], "2025-01-11": [{"open": "09:30", "close": "20:00"}], "2025-01-12": [{"open": "09:30", "close": "20:00"}], "2025-01-13": [{"open": "09:30", "close": "20:00"}], "2025-01-14": [{"open": "17:30", "close": "22:30"}], "2025-01-15": [{"open": "17:30", "close": "22:30"}], "2025-01-16": [{"open": "17:30", "close": "22:30"}], "2025-01-18": [{"open": "09:30", "close": "20:00"}], "2025-01-19": [{"open": "09:30", "close": "20:00"}], "2025-01-20": [{"open": "17:30", "close": "22:30"}], "2025-01-21": [{"open": "17:30", "close": "22:30"}], "2025-01-22": [{"open": "17:30", "close": "22:30"}], "2025-01-23": [{"open": "17:30", "close": "22:30"}], "2025-01-25": [{"open": "09:30", "close": "20:00"}], "2025-01-26": [{"open": "09:30", "close": "20:00"}], "2025-01-27": [{"open": "17:30", "close": "22:30"}], "2025-01-28": [{"open": "17:30", "close": "22:30"}], "2025-01-29": [{"open": "17:30", "close": "22:30"}], "2025-01-30": [{"open": "17:30", "close": "22:30"}], "2025-02-01": [{"open": "09:30", "close": "20:00"}], "2025-02-02": [{"open": "09:30", "close": "20:00"}], "2025-02-03": [{"open": "17:30", "close": "22:30"}], "2025-02-04": [{"open": "17:30", "close": "22:30"}], "2025-02-05": [{"open": "17:30", "close": "22:30"}], "2025-02-06": [{"open": "17:30", "close": "22:30"}], "2025-02-08": [{"open": "09:30", "close": "20:00"}], "2025-02-09": [{"open": "09:30", "close": "20:00"}], "2025-02-10": [{"open": "17:30", "close": "22:30"}], "2025-02-11": [{"open": "09:30", "close": "20:00"}], "2025-02-12": [{"open": "17:30", "close": "22:30"}], "2025-02-13": [{"open": "17:30", "close": "22:30"}], "2025-02-15": [{"open": "09:30", "close": "20:00"}], "2025-02-16": [{"open": "09:30", "close": "20:00"}], "2025-02-17": [{"open": "17:30", "close": "22:30"}], "2025-02-18": [{"open": "17:30", "close": "22:30"}], "2025-02-19": [{"open": "17:30", "close": "22:30"}], "2025-02-20": [{"open": "17:30", "close": "22:30"}], "2025-02-22": [{"open": "09:30", "close": "20:00"}], "2025-02-23": [{"open": "09:30", "close": "20:00"}], "2025-02-24": [{"open": "09:30", "close": "20:00"}], "2025-02-25": [{"open": "17:30", "close": "22:30"}], "2025-02-26": [{"open": "17:30", "close": "22:30"}], "2025-02-27": [{"open": "17:30", "close": "22:30"}], "2025-03-01": [{"open": "09:30", "close": "20:00"}], "2025-03-02": [{"open": "09:30", "close": "20:00"}], "2025-03-03": [{"open": "17:30", "close": "22:30"}], "2025-03-04": [{"open": "17:30", "close": "22:30"}], "2025-03-05": [{"open": "17:30", "close": "22:30"}], "2025-03-06": [{"open": "17:30", "close": "22:30"}], "2025-03-08": [{"open": "09:30", "close": "20:00"}], "2025-03-09": [{"open": "09:30", "close": "20:00"}], "2025-03-10": [{"open": "17:30", "close": "22:30"}], "2025-03-11": [{"open": "17:30", "close": "22:30"}], "2025-03-12": [{"open": "17:30", "close": "22:30"}], "2025-03-13": [{"open": "17:30", "close": "22:30"}], "2025-03-15": [{"open": "09:30", "close": "20:00"}], "2025-03-16": [{"open": "09:30", "close": "20:00"}], "2025-03-17": [{"open": "17:30", "close": "22:30"}], "2025-03-18": [{"open": "17:30", "close": "22:30"}], "2025-03-19": [{"open": "17:30", "close": "22:30"}], "2025-03-20": [{"open": "09:30", "close": "20:00"}], "2025-03-22": [{"open": "09:30", "close": "20:00"}], "2025-03-23": [{"open": "09:30", "close": "20:00"}], "2025-03-24": [{"open": "17:30", "close": "22:30"}], "2025-03-25": [{"open": "17:30", "close": "22:30"}], "2025-03-26": [{"open": "17:30", "close": "22:30"}], "2025-03-27": [{"open": "17:30", "close": "22:30"}], "2025-03-29": [{"open": "09:30", "close": "20:00"}], "2025-03-30": [{"open": "09:30", "close": "20:00"}], "2025-03-31": [{"open": "17:30", "close": "22:30"}], "2025-04-01": [{"open": "17:30", "close": "22:30"}], "2025-04-02": [{"open": "17:30", "close": "22:30"}], "2025-04-03": [{"open": "17:30", "close": "22:30"}], "2025-04-05": [{"open": "09:30", "close": "20:00"}], "2025-04-06": [{"open": "09:30", "close": "20:00"}], "2025-04-07": [{"open": "17:30", "close": "22:30"}], "2025-04-08": [{"open": "17:30", "close": "22:30"}], "2025-04-09": [{"open": "17:30", "close": "22:30"}], "2025-04-10": [{"open": "17:30", "close": "22:30"}], "2025-04-12": [{"open": "09:30", "close": "20:00"}], "2025-04-13": [{"open": "09:30", "close": "20:00"}], "2025-04-14": [{"open": "17:30", "close": "22:30"}], "2025-04-15": [{"open": "17:30", "close": "22:30"}], "2025-04-16": [{"open": "17:30", "close": "22:30"}], "2025-04-17": [{"open": "17:30", "close": "22:30"}], "2025-04-19": [{"open": "09:30", "close": "20:00"}], "2025-04-20": [{"open": "09:30", "close": "20:00"}], "2025-04-21": [{"open": "17:30", "close": "22:30"}], "2025-04-22": [{"open": "17:30", "close": "22:30"}], "2025-04-23": [{"open": "17:30", "close": "22:30"}], "2025-04-24": [{"open": "17:30", "close": "22:30"}], "2025-04-26": [{"open": "09:30", "close": "20:00"}], "2025-04-27": [{"open": "09:30", "close": "20:00"}], "2025-04-28": [{"open": "17:30", "close": "22:30"}], "2025-04-29": [{"open": "09:30", "close": "20:00"}], "2025-04-30": [{"open": "17:30", "close": "22:30"}], "2025-05-01": [{"open": "17:30", "close": "22:30"}], "2025-05-03": [{"open": "09:30", "close": "20:00"}], "2025-05-04": [{"open": "09:30", "close": "20:00"}], "2025-05-05": [{"open": "09:30", "close": "20:00"}], "2025-05-06": [{"open": "09:30", "close": "20:00"}], "2025-05-07": [{"open": "17:30", "close": "22:30"}], "2025-05-08": [{"open": "17:30", "close": "22:30"}], "2025-05-10": [{"open": "09:30", "close": "20:00"}], "2025-05-11": [{"open": "09:30", "close": "20:00"}], "2025-05-12": [{"open": "17:30", "close": "22:30"}], "2025-05-13": [{"open": "17:30", "close": "22:30"}], "2025-05-14": [{"open": "17:30", "close": "22:30"}], "2025-05-15": [{"open": "17:30", "close": "22:30"}], "2025-05-17": [{"open": "09:30", "close": "20:00"}], "2025-05-18": [{"open": "09:30", "close": "20:00"}], "2025-05-19": [{"open": "17:30", "close": "22:30"}], "2025-05-20": [{"open": "17:30", "close": "22:30"}], "2025-05-21": [{"open": "17:30", "close": "22:30"}], "2025-05-22": [{"open": "17:30", "close": "22:30"}], "2025-05-24": [{"open": "09:30", "close": "20:00"}], "2025-05-25": [{"open": "09:30", "close": "20:00"}], "2025-05-26": [{"open": "17:30", "close": "22:30"}], "2025-05-27": [{"open": "17:30", "close": "22:30"}], "2025-05-28": [{"open": "17:30", "close": "22:30"}], "2025-05-29": [{"open": "17:30", "close": "22:30"}], "2025-05-31": [{"open": "09:30", "close": "20:00"}], "2025-06-01": [{"open": "09:30", "close": "20:00"}], "2025-06-02": [{"open": "17:30", "close": "22:30"}], "2025-06-03": [{"open": "17:30", "close": "22:30"}], "2025-06-04": [{"open": "17:30", "close": "22:30"}], "2025-06-05": [{"open": "17:30", "close": "22:30"}], "2025-06-07": [{"open": "09:30", "close": "20:00"}], "2025-06-08": [{"open": "09:30", "close": "20:00"}], "2025-06-09": [{"open": "17:30", "close": "22:30"}], "2025-06-10": [{"open": "17:30", "close": "22:30"}], "2025-06-11": [{"open": "17:30", "close": "22:30"}], "2025-06-12": [{"open": "17:30", "close": "22:30"}], "2025-06-14": [{"open": "09:30", "close": "20:00"}], "2025-06-15": [{"open": "09:30", "close": "20:00"}], "2025-06-16": [{"open": "17:30", "close": "22:30"}], "2025-06-17": [{"open": "17:30", "close": "22:30"}], "2025-06-18": [{"open": "17:30", "close": "22:30"}], "2025-06-19": [{"open": "17:30", "close": "22:30"}], "2025-06-21": [{"open": "09:30", "close": "20:00"}], "2025-06-22": [{"open": "09:30", "close": "20:00"}], "2025-06-23": [{"open": "17:30", "close": "22:30"}], "2025-06-24": [{"open": "17:30", "close": "22:30"}], "2025-06-25": [{"open": "17:30", "close": "22:30"}], "2025-06-26": [{"open": "17:30", "close": "22:30"}], "2025-06-28": [{"open": "09:30", "close": "20:00"}], "2025-06-29": [{"open": "09:30", "close": "20:00"}], "2025-06-30": [{"open": "17:30", "close": "22:30"}], "2025-07-01": [{"open": "17:30", "close": "22:30"}], "2025-07-02": [{"open": "17:30", "close": "22:30"}], "2025-07-03": [{"open": "17:30", "close": "22:30"}], "2025-07-05": [{"open": "09:30", "close": "20:00"}], "2025-07-06": [{"open": "09:30", "close": "20:00"}], "2025-07-07": [{"open": "17:30", "close": "22:30"}], "2025-07-08": [{"open": "17:30", "close": "22:30"}], "2025-07-09": [{"open": "17:30", "close": "22:30"}], "2025-07-10": [{"open": "17:30", "close": "22:30"}], "2025-07-12": [{"open": "09:30", "close": "20:00"}], "2025-07-13": [{"open": "09:30", "close": "20:00"}], "2025-07-14": [{"open": "17:30", "close": "22:30"}], "2025-07-15": [{"open": "17:30", "close": "22:30"}], "2025-07-16": [{"open": "17:30", "close": "22:30"}], "2025-07-17": [{"open": "17:30", "close": "22:30"}], "2025-07-19": [{"open": "09:30", "close": "20:00"}], "2025-07-20": [{"open": "09:30", "close": "20:00"}], "2025-07-21": [{"open": "09:30", "close": "20:00"}], "2025-07-22": [{"open": "17:30", "close": "22:30"}], "2025-07-23": [{"open": "17:30", "close": "22:30"}], "2025-07-24": [{"open": "17:30", "close": "22:30"}], "2025-07-26": [{"open": "09:30", "close": "20:00"}], "2025-07-27": [{"open": "09:30", "close": "20:00"}], "2025-07-28": [{"open": "17:30", "close": "22:30"}], "2025-07-29": [{"open": "17:30", "close": "22:30"}], "2025-07-30": [{"open": "17:30", "close": "22:30"}], "2025-07-31": [{"open": "17:30", "close": "22:30"}], "2025-08-02": [{"open": "09:30", "close": "20:00"}], "2025-08-03": [{"open": "09:30", "close": "20:00"}], "2025-08-04": [{"open": "17:30", "close": "22:30"}], "2025-08-05": [{"open": "17:30", "close": "22:30"}], "2025-08-06": [{"open": "17:30", "close": "22:30"}], "2025-08-07": [{"open": "17:30", "close": "22:30"}], "2025-08-09": [{"open": "09:30", "close": "20:00"}], "2025-08-10": [{"open": "09:30", "close": "20:00"}], "2025-08-11": [{"open": "09:30", "close": "20:00"}], "2025-08-12": [{"open": "17:30", "close": "22:30"}], "2025-08-13": [{"open": "17:30", "close": "22:30"}], "2025-08-14": [{"open": "17:30", "close": "22:30"}], "2025-08-16": [{"open": "09:30", "close": "20:00"}], "2025-08-17": [{"open": "09:30", "close": "20:00"}], "2025-08-18": [{"open": "17:30", "close": "22:30"}], "2025-08-19": [{"open": "17:30", "close": "22:30"}], "2025-08-20": [{"open": "17:30", "close": "22:30"}], "2025-08-21": [{"open": "17:30", "close": "22:30"}], "2025-08-23": [{"open": "09:30", "close": "20:00"}], "2025-08-24": [{"open": "09:30", "close": "20:00"}], "2025-08-25": [{"open": "17:30", "close": "22:30"}], "2025-08-26": [{"open": "17:30", "close": "22:30"}], "2025-08-27": [{"open": "17:30", "close": "22:30"}], "2025-08-28": [{"open": "17:30", "close": "22:30"}], "2025-08-30": [{"open": "09:30", "close": "20:00"}], "2025-08-31": [{"open": "09:30", "close": "20:00"}], "2025-09-01": [{"open": "17:30", "close": "22:30"}], "2025-09-02": [{"open": "17:30", "close": "22:30"}], "2025-09-03": [{"open": "17:30", "close": "22:30"}], "2025-09-04": [{"open": "17:30", "close": "22:30"}], "2025-09-06": [{"open": "09:30", "close": "20:00"}], "2025-09-07": [{"open": "09:30", "close": "20:00"}], "2025-09-08": [{"open": "17:30", "close": "22:30"}], "2025-09-09": [{"open": "17:30", "close": "22:30"}], "2025-09-10": [{"open": "17:30", "close": "22:30"}], "2025-09-11": [{"open": "17:30", "close": "22:30"}], "2025-09-13": [{"open": "09:30", "close": "20:00"}], "2025-09-14": [{"open": "09:30", "close": "20:00"}], "2025-09-15": [{"open": "09:30", "close": "20:00"}], "2025-09-16": [{"open": "17:30", "close": "22:30"}], "2025-09-17": [{"open": "17:30", "close": "22:30"}], "2025-09-18": [{"open": "17:30", "close": "22:30"}], "2025-09-20": [{"open": "09:30", "close": "20:00"}], "2025-09-21": [{"open": "09:30", "close": "20:00"}], "2025-09-22": [{"open": "17:30", "close": "22:30"}], "2025-09-23": [{"open": "09:30", "close": "20:00"}], "2025-09-24": [{"open": "17:30", "close": "22:30"}], "2025-09-25": [{"open": "17:30", "close": "22:30"}], "2025-09-27": [{"open": "09:30", "close": "20:00"}], "2025-09-28": [{"open": "09:30", "close": "20:00"}], "2025-09-29": [{"open": "17:30", "close": "22:30"}], "2025-09-30": [{"open": "17:30", "close": "22:30"}], "2025-10-01": [{"open": "17:30", "close": "22:30"}], "2025-10-02": [{"open": "17:30", "close": "22:30"}], "2025-10-04": [{"open": "09:30", "close": "20:00"}], "2025-10-05": [{"open": "09:30", "close": "20:00"}], "2025-10-06": [{"open": "17:30", "close": "22:30"}], "2025-10-07": [{"open": "17:30", "close": "22:30"}], "2025-10-08": [{"open": "17:30", "close": "22:30"}], "2025-10-09": [{"open": "17:30", "close": "22:30"}], "2025-10-11": [{"open": "09:30", "close": "20:00"}], "2025-10-12": [{"open": "09:30", "close": "20:00"}], "2025-10-13": [{"open": "09:30", "close": "20:00"}], "2025-10-14": [{"open": "17:30", "close": "22:30"}], "2025-10-15": [{"open": "17:30", "close": "22:30"}], "2025-10-16": [{"open": "17:30", "close": "22:30"}], "2025-10-18": [{"open": "09:30", "close": "20:00"}], "2025-10-19": [{"open": "09:30", "close": "20:00"}], "2025-10-20": [{"open": "17:30", "close": "22:30"}], "2025-10-21": [{"open": "17:30", "close": "22:30"}], "2025-10-22": [{"open": "17:30", "close": "22:30"}], "2025-10-23": [{"open": "17:30", "close": "22:30"}], "2025-10-25": [{"open": "09:30", "close": "20:00"}], "2025-10-26": [{"open": "09:30", "close": "20:00"}], "2025-10-27": [{"open": "17:30", "close": "22:30"}], "2025-10-28": [{"open": "17:30", "close": "22:30"}], "2025-10-29": [{"open": "17:30", "close": "22:30"}], "2025-10-30": [{"open": "17:30", "close": "22:30"}], "2025-11-01": [{"open": "09:30", "close": "20:00"}], "2025-11-02": [{"open": "09:30", "close": "20:00"}], "2025-11-03": [{"open": "09:30", "close": "20:00"}], "2025-11-04": [{"open": "17:30", "close": "22:30"}], "2025-11-05": [{"open": "17:30", "close": "22:30"}], "2025-11-06": [{"open": "17:30", "close": "22:30"}], "2025-11-08": [{"open": "09:30", "close": "20:00"}], "2025-11-09": [{"open": "09:30", "close": "20:00"}], "2025-11-10": [{"open": "17:30", "close": "22:30"}], "2025-11-11": [{"open": "17:30", "close": "22:30"}], "2025-11-12": [{"open": "17:30", "close": "22:30"}], "2025-11-13": [{"open": "17:30", "close": "22:30"}], "2025-11-15": [{"open": "09:30", "close": "20:00"}], "2025-11-16": [{"open": "09:30", "close": "20:00"}], "2025-11-17": [{"open": "17:30", "close": "22:30"}], "2025-11-18": [{"open": "17:30", "close": "22:30"}], "2025-11-19": [{"open": "17:30", "close": "22:30"}], "2025-11-20": [{"open": "17:30", "close": "22:30"}], "2025-11-22": [{"open": "09:30", "close": "20:00"}], "2025-11-23": [{"open": "09:30", "close": "20:00"}], "2025-11-24": [{"open": "09:30", "close": "20:00"}], "2025-11-25": [{"open": "17:30", "close": "22:30"}], "2025-11-26": [{"open": "17:30", "close": "22:30"}], "2025-11-27": [{"open": "17:30", "close": "22:30"}], "2025-11-29": [{"open": "09:30", "close": "20:00"}], "2025-11-30": [{"open": "09:30", "close": "20:00"}], "2025-12-01": [{"open": "17:30", "close": "22:30"}], "2025-12-02": [{"open": "17:30", "close": "22:30"}], "2025-12-03": [{"open": "17:30", "close": "22:30"}], "2025-12-04": [{"open": "17:30", "close": "22:30"}], "2025-12-06": [{"open": "09:30", "close": "20:00"}], "2025-12-07": [{"open": "09:30", "close": "20:00"}], "2025-12-08": [{"open": "17:30", "close": "22:30"}], "2025-12-09": [{"open": "17:30", "close": "22:30"}], "2025-12-10": [{"open": "17:30", "close": "22:30"}], "2025-12-11": [{"open": "17:30", "close": "22:30"}], "2025-12-13": [{"open": "09:30", "close": "20:00"}], "2025-12-14": [{"open": "09:30", "close": "20:00"}], "2025-12-15": [{"open": "17:30", "close": "22:30"}], "2025-12-16": [{"open": "17:30", "close": "22:30"}], "2025-12-17": [{"open": "17:30", "close": "22:30"}], "2025-12-18": [{"open": "17:30", "close": "22:30"}], "2025-12-20": [{"open": "09:30", "close": "20:00"}], "2025-12-21": [{"open": "09:30", "close": "20:00"}], "2025-12-22": [{"open": "17:30", "close": "22:30"}], "2025-12-23": [{"open": "17:30", "close": "22:30"}], "2025-12-24": [{"open": "17:30", "close": "22:30"}], "2025-12-25": [{"open": "17:30", "close": "22:30"}], "2025-12-27": [{"open": "09:30", "close": "20:00"}], "2025-12-28": [{"open": "09:30", "close": "20:00"}], "2025-12-29": [{"open": "17:30", "close": "22:30"}], "2025-12-30": [{"open": "17:30", "close": "22:30"}], "2025-12-31": [{"open": "17:30", "close": "22:30"}]}, "千葉さくらBRUSH?": {"2025-01-01": [{"open": "10:00", "close": "21:00"}], "2025-01-02": [{"open": "17:00", "close": "23:00"}], "2025-01-03": [{"open": "17:00", "close": "23:00"}], "2025-01-04": [{"open": "10:00", "close": "21:00"}], "2025-01-05": [{"open": "10:00", "close": "21:00"}], "2025-01-07": [{"open": "17:00", "close": "23:00"}], "2025-01-08": [{"open": "17:00", "close": "23:00"}], "2025-01-09": [{"open": "17:00", "close": "23:00"}], "2025-01-10": [{"open": "17:00", "close": "23:00"}], "2025-01-11": [{"open": "10:00", "close": "21:00"}], "2025-01-12": [{"open": "10:00", "close": "21:00"}], "2025-01-14": [{"open": "17:00", "close": "23:00"}], "2025-01-15": [{"open": "17:00", "close": "23:00"}], "2025-01-16": [{"open": "17:00", "close": "23:00"}], "2025-01-17": [{"open": "17:00", "close": "23:00"}], "2025-01-18": [{"open": "10:00", "close": "21:00"}], "2025-01-19": [{"open": "10:00", "close": "21:00"}], "2025-01-21": [{"open": "17:00", "close": "23:00"}], "2025-01-22": [{"open": "17:00", "close": "23:00"}], "2025-01-23": [{"open": "17:00", "close": "23:00"}], "2025-01-24": [{"open": "17:00", "close": "23:00"}], "2025-01-25": [{"open": "10:00", "close": "21:00"}], "2025-01-26": [{"open": "10:00", "close": "21:00"}], "2025-01-28": [{"open": "17:00", "close": "23:00"}], "2025-01-29": [{"open": "17:00", "close": "23:00"}], "2025-01-30": [{"open": "17:00", "close": "23:00"}], "2025-01-31": [{"open": "17:00", "close": "23:00"}], "2025-02-01": [{"open": "10:00", "close": "21:00"}], "2025-02-02": [{"open": "10:00", "close": "21:00"}], "2025-02-04": [{"open": "17:00", "close": "23:00"}], "2025-02-05": [{"open": "17:00", "close": "23:00"}], "2025-02-06": [{"open": "17:00", "close": "23:00"}], "2025-02-07": [{"open": "17:00", "close": "23:00"}], "2025-02-08": [{"open": "10:00", "close": "21:00"}], "2025-02-09": [{"open": "10:00", "close": "21:00"}], "2025-02-11": [{"open": "10:00", "close": "21:00"}], "2025-02-12": [{"open": "17:00", "close": "23:00"}], "2025-02-13": [{"open": "17:00", "close": "23:00"}], "2025-02-14": [{"open": "17:00", "close": "23:00"}], "2025-02-15": [{"open": "10:00", "close": "21:00"}], "2025-02-16": [{"open": "10:00", "close": "21:00"}], "2025-02-18": [{"open": "17:00", "close": "23:00"}], "2025-02-19": [{"open": "17:00", "close": "23:00"}], "2025-02-20": [{"open": "17:00", "close": "23:00"}], "2025-02-21": [{"open": "17:00", "close": "23:00"}], "2025-02-22": [{"open": "10:00", "close": "21:00"}], "2025-02-23": [{"open": "10:00", "close": "21:00"}], "2025-02-25": [{"open": "17:00", "close": "23:00"}], "2025-02-26": [{"open": "17:00", "close": "23:00"}], "2025-02-27": [{"open": "17:00", "close": "23:00"}], "2025-02-28": [{"open": "17:00", "close": "23:00"}], "2025-03-01": [{"open": "10:00", "close": "21:00"}], "2025-03-02": [{"open": "10:00", "close": "21:00"}], "2025-03-04": [{"open": "17:00", "close": "23:00"}], "2025-03-05": [{"open": "17:00", "close": "23:00"}], "2025-03-06": [{"open": "17:00", "close": "23:00"}], "2025-03-07": [{"open": "17:00", "close": "23:00"}], "2025-03-08": [{"open": "10:00", "close": "21:00"}], "2025-03-09": [{"open": "10:00", "close": "21:00"}], "2025-03-11": [{"open": "17:00", "close": "23:00"}], "2025-03-12": [{"open": "17:00", "close": "23:00"}], "2025-03-13": [{"open": "17:00", "close": "23:00"}], "2025-03-14": [{"open": "17:00", "close": "23:00"}], "2025-03-15": [{"open": "10:00", "close": "21:00"}], "2025-03-16": [{"open": "10:00", "close": "21:00"}], "2025-03-18": [{"open": "17:00", "close": "23:00"}], "2025-03-19": [{"open": "17:00", "close": "23:00"}], "2025-03-20": [{"open": "10:00", "close": "21:00"}], "2025-03-21": [{"open": "17:00", "close": "23:00"}], "2025-03-22": [{"open": "10:00", "close": "21:00"}], "2025-03-23": [{"open": "10:00", "close": "21:00"}], "2025-03-25": [{"open": "17:00", "close": "23:00"}], "2025-03-26": [{"open": "17:00", "close": "23:00"}], "2025-03-27": [{"open": "17:00", "close": "23:00"}], "2025-03-28": [{"open": "17:00", "close": "23:00"}], "2025-03-29": [{"open": "10:00", "close": "21:00"}], "2025-03-30": [{"open": "10:00", "close": "21:00"}], "2025-04-01": [{"open": "17:00", "close": "23:00"}], "2025-04-02": [{"open": "17:00", "close": "23:00"}], "2025-04-03": [{"open": "17:00", "close": "23:00"}], "2025-04-04": [{"open": "17:00", "close": "23:00"}], "2025-04-05": [{"open": "10:00", "close": "21:00"}], "2025-04-06": [{"open": "10:00", "close": "21:00"}], "2025-04-08": [{"open": "17:00", "close": "23:00"}], "2025-04-09": [{"open": "17:00", "close": "23:00"}], "2025-04-10": [{"open": "17:00", "close": "23:00"}], "2025-04-11": [{"open": "17:00", "close": "23:00"}], "2025-04-12": [{"open": "10:00", "close": "21:00"}], "2025-04-13": [{"open": "10:00", "close": "21:00"}], "2025-04-15": [{"open": "17:00", "close": "23:00"}], "2025-04-16": [{"open": "17:00", "close": "23:00"}], "2025-04-17": [{"open": "17:00", "close": "23:00"}], "2025-04-18": [{"open": "17:00", "close": "23:00"}], "2025-04-19": [{"open": "10:00", "close": "21:00"}], "2025-04-20": [{"open": "10:00", "close": "21:00"}], "2025-04-22": [{"open": "17:00", "close": "23:00"}], "2025-04-23": [{"open": "17:00", "close": "23:00"}], "2025-04-24": [{"open": "17:00", "close": "23:00"}], "2025-04-25": [{"open": "17:00", "close": "23:00"}], "2025-04-26": [{"open": "10:00", "close": "21:00"}], "2025-04-27": [{"open": "10:00", "close": "21:00"}], "2025-04-29": [{"open": "10:00", "close": "21:00"}], "2025-04-30": [{"open": "17:00", "close": "23:00"}], "2025-05-01": [{"open": "17:00", "close": "23:00"}], "2025-05-02": [{"open": "17:00", "close": "23:00"}], "2025-05-03": [{"open": "10:00", "close": "21:00"}], "2025-05-04": [{"open": "10:00", "close": "21:00"}], "2025-05-06": [{"open": "10:00", "close": "21:00"}], "2025-05-07": [{"open": "17:00", "close": "23:00"}], "2025-05-08": [{"open": "17:00", "close": "23:00"}], "2025-05-09": [{"open": "17:00", "close": "23:00"}], "2025-05-10": [{"open": "10:00", "close": "21:00"}], "2025-05-11": [{"open": "10:00", "close": "21:00"}], "2025-05-13": [{"open": "17:00", "close": "23:00"}], "2025-05-14": [{"open": "17:00", "close": "23:00"}], "2025-05-15": [{"open": "17:00", "close": "23:00"}], "2025-05-16": [{"open": "17:00", "close": "23:00"}], "2025-05-17": [{"open": "10:00", "close": "21:00"}], "2025-05-18": [{"open": "10:00", "close": "21:00"}], "2025-05-20": [{"open": "17:00", "close": "23:00"}], "2025-05-21": [{"open": "17:00", "close": "23:00"}], "2025-05-22": [{"open": "17:00", "close": "23:00"}], "2025-05-23": [{"open": "17:00", "close": "23:00"}], "2025-05-24": [{"open": "10:00", "close": "21:00"}], "2025-05-25": [{"open": "10:00", "close": "21:00"}], "2025-05-27": [{"open": "17:00", "close": "23:00"}], "2025-05-28": [{"open": "17:00", "close": "23:00"}], "2025-05-29": [{"open": "17:00", "close": "23:00"}], "2025-05-30": [{"open": "17:00", "close": "23:00"}], "2025-05-31": [{"open": "10:00", "close": "21:00"}], "2025-06-01": [{"open": "10:00", "close": "21:00"}], "2025-06-03": [{"open": "17:00", "close": "23:00"}], "2025-06-04": [{"open": "17:00", "close": "23:00"}], "2025-06-05": [{"open": "17:00", "close": "23:00"}], "2025-06-06": [{"open": "17:00", "close": "23:00"}], "2025-06-07": [{"open": "10:00", "close": "21:00"}], "2025-06-08": [{"open": "10:00", "close": "21:00"}], "2025-06-10": [{"open": "17:00", "close": "23:00"}], "2025-06-11": [{"open": "17:00", "close": "23:00"}], "2025-06-12": [{"open": "17:00", "close": "23:00"}], "2025-06-13": [{"open": "17:00", "close": "23:00"}], "2025-06-14": [{"open": "10:00", "close": "21:00"}], "2025-06-15": [{"open": "10:00", "close": "21:00"}], "2025-06-17": [{"open": "17:00", "close": "23:00"}], "2025-06-18": [{"open": "17:00", "close": "23:00"}], "2025-06-19": [{"open": "17:00", "close": "23:00"}], "2025-06-20": [{"open": "17:00", "close": "23:00"}], "2025-06-21": [{"open": "10:00", "close": "21:00"}], "2025-06-22": [{"open": "10:00", "close": "21:00"}], "2025-06-24": [{"open": "17:00", "close": "23:00"}], "2025-06-25": [{"open": "17:00", "close": "23:00"}], "2025-06-26": [{"open": "17:00", "close": "23:00"}], "2025-06-27": [{"open": "17:00", "close": "23:00"}], "2025-06-28": [{"open": "10:00", "close": "21:00"}], "2025-06-29": [{"open": "10:00", "close": "21:00"}], "2025-07-01": [{"open": "17:00", "close": "23:00"}], "2025-07-02": [{"open": "17:00", "close": "23:00"}], "2025-07-03": [{"open": "17:00", "close": "23:00"}], "2025-07-04": [{"open": "17:00", "close": "23:00"}], "2025-07-05": [{"open": "10:00", "close": "21:00"}], "2025-07-06": [{"open": "10:00", "close": "21:00"}], "2025-07-08": [{"open": "17:00", "close": "23:00"}], "2025-07-09": [{"open": "17:00", "close": "23:00"}], "2025-07-10": [{"open": "17:00", "close": "23:00"}], "2025-07-11": [{"open": "17:00", "close": "23:00"}], "2025-07-12": [{"open": "10:00", "close": "21:00"}], "2025-07-13": [{"open": "10:00", "close": "21:00"}], "2025-07-15": [{"open": "17:00", "close": "23:00"}], "2025-07-16": [{"open": "17:00", "close": "23:00"}], "2025-07-17": [{"open": "17:00", "close": "23:00"}], "2025-07-18": [{"open": "17:00", "close": "23:00"}], "2025-07-19": [{"open": "10:00", "close": "21:00"}], "2025-07-20": [{"open": "10:00", "close": "21:00"}], "2025-07-22": [{"open": "17:00", "close": "23:00"}], "2025-07-23": [{"open": "17:00", "close": "23:00"}], "2025-07-24": [{"open": "17:00", "close": "23:00"}], "2025-07-25": [{"open": "17:00", "close": "23:00"}], "2025-07-26": [{"open": "10:00", "close": "21:00"}], "2025-07-27": [{"open": "10:00", "close": "21:00"}], "2025-07-29": [{"open": "17:00", "close": "23:00"}], "2025-07-30": [{"open": "17:00", "close": "23:00"}], "2025-07-31": [{"open": "17:00", "close": "23:00"}], "2025-08-01": [{"open": "17:00", "close": "23:00"}], "2025-08-02": [{"open": "10:00", "close": "21:00"}], "2025-08-03": [{"open": "10:00", "close": "21:00"}], "2025-08-05": [{"open": "17:00", "close": "23:00"}], "2025-08-06": [{"open": "17:00", "close": "23:00"}], "2025-08-07": [{"open": "17:00", "close": "23:00"}], "2025-08-08": [{"open": "17:00", "close": "23:00"}], "2025-08-09": [{"open": "10:00", "close": "21:00"}], "2025-08-10": [{"open": "10:00", "close": "21:00"}], "2025-08-12": [{"open": "17:00", "close": "23:00"}], "2025-08-13": [{"open": "17:00", "close": "23:00"}], "2025-08-14": [{"open": "17:00", "close": "23:00"}], "2025-08-15": [{"open": "17:00", "close": "23:00"}], "2025-08-16": [{"open": "10:00", "close": "21:00"}], "2025-08-17": [{"open": "10:00", "close": "21:00"}], "2025-08-19": [{"open": "17:00", "close": "23:00"}], "2025-08-20": [{"open": "17:00", "close": "23:00"}], "2025-08-21": [{"open": "17:00", "close": "23:00"}], "2025-08-22": [{"open": "17:00", "close": "23:00"}], "2025-08-23": [{"open": "10:00", "close": "21:00"}], "2025-08-24": [{"open": "10:00", "close": "21:00"}], "2025-08-26": [{"open": "17:00", "close": "23:00"}], "2025-08-27": [{"open": "17:00", "close": "23:00"}], "2025-08-28": [{"open": "17:00", "close": "23:00"}], "2025-08-29": [{"open": "17:00", "close": "23:00"}], "2025-08-30": [{"open": "10:00", "close": "21:00"}], "2025-08-31": [{"open": "10:00", "close": "21:00"}], "2025-09-02": [{"open": "17:00", "close": "23:00"}], "2025-09-03": [{"open": "17:00", "close": "23:00"}], "2025-09-04": [{"open": "17:00", "close": "23:00"}], "2025-09-05": [{"open": "17:00", "close": "23:00"}], "2025-09-06": [{"open": "10:00", "close": "21:00"}], "2025-09-07": [{"open": "10:00", "close": "21:00"}], "2025-09-09": [{"open": "17:00", "close": "23:00"}], "2025-09-10": [{"open": "17:00", "close": "23:00"}], "2025-09-11": [{"open": "17:00", "close": "23:00"}], "2025-09-12": [{"open": "17:00", "close": "23:00"}], "2025-09-13": [{"open": "10:00", "close": "21:00"}], "2025-09-14": [{"open": "10:00", "close": "21:00"}], "2025-09-16": [{"open": "17:00", "close": "23:00"}], "2025-09-17": [{"open": "17:00", "close": "23:00"}], "2025-09-18": [{"open": "17:00", "close": "23:00"}], "2025-09-19": [{"open": "17:00", "close": "23:00"}], "2025-09-20": [{"open": "10:00", "close": "21:00"}], "2025-09-21": [{"open": "10:00", "close": "21:00"}], "2025-09-23": [{"open": "10:00", "close": "21:00"}], "2025-09-24": [{"open": "17:00", "close": "23:00"}], "2025-09-25": [{"open": "17:00", "close": "23:00"}], "2025-09-26": [{"open": "17:00", "close": "23:00"}], "2025-09-27": [{"open": "10:00", "close": "21:00"}], "2025-09-28": [{"open": "10:00", "close": "21:00"}], "2025-09-30": [{"open": "17:00", "close": "23:00"}], "2025-10-01": [{"open": "17:00", "close": "23:00"}], "2025-10-02": [{"open": "17:00", "close": "23:00"}], "2025-10-03": [{"open": "17:00", "close": "23:00"}], "2025-10-04": [{"open": "10:00", "close": "21:00"}], "2025-10-05": [{"open": "10:00", "close": "21:00"}], "2025-10-07": [{"open": "17:00", "close": "23:00"}], "2025-10-08": [{"open": "17:00", "close": "23:00"}], "2025-10-09": [{"open": "17:00", "close": "23:00"}], "2025-10-10": [{"open": "17:00", "close": "23:00"}], "2025-10-11": [{"open": "10:00", "close": "21:00"}], "2025-10-12": [{"open": "10:00", "close": "21:00"}], "2025-10-14": [{"open": "17:00", "close": "23:00"}], "2025-10-15": [{"open": "17:00", "close": "23:00"}], "2025-10-16": [{"open": "17:00", "close": "23:00"}], "2025-10-17": [{"open": "17:00", "close": "23:00"}], "2025-10-18": [{"open": "10:00", "close": "21:00"}], "2025-10-19": [{"open": "10:00", "close": "21:00"}], "2025-10-21": [{"open": "17:00", "close": "23:00"}], "2025-10-22": [{"open": "17:00", "close": "23:00"}], "2025-10-23": [{"open": "17:00", "close": "23:00"}], "2025-10-24": [{"open": "17:00", "close": "23:00"}], "2025-10-25": [{"open": "10:00", "close": "21:00"}], "2025-10-26": [{"open": "10:00", "close": "21:00"}], "2025-10-28": [{"open": "17:00", "close": "23:00"}], "2025-10-29": [{"open": "17:00", "close": "23:00"}], "2025-10-30": [{"open": "17:00", "close": "23:00"}], "2025-10-31": [{"open": "17:00", "close": "23:00"}], "2025-11-01": [{"open": "10:00", "close": "21:00"}], "2025-11-02": [{"open": "10:00", "close": "21:00"}], "2025-11-04": [{"open": "17:00", "close": "23:00"}], "2025-11-05": [{"open": "17:00", "close": "23:00"}], "2025-11-06": [{"open": "17:00", "close": "23:00"}], "2025-11-07": [{"open": "17:00", "close": "23:00"}], "2025-11-08": [{"open": "10:00", "close": "21:00"}], "2025-11-09": [{"open": "10:00", "close": "21:00"}], "2025-11-11": [{"open": "17:00", "close": "23:00"}], "2025-11-12": [{"open": "17:00", "close": "23:00"}], "2025-11-13": [{"open": "17:00", "close": "23:00"}], "2025-11-14": [{"open": "17:00", "close": "23:00"}], "2025-11-15": [{"open": "10:00", "close": "21:00"}], "2025-11-16": [{"open": "10:00", "close": "21:00"}], "2025-11-18": [{"open": "17:00", "close": "23:00"}], "2025-11-19": [{"open": "17:00", "close": "23:00"}], "2025-11-20": [{"open": "17:00", "close": "23:00"}], "2025-11-21": [{"open": "17:00", "close": "23:00"}], "2025-11-22": [{"open": "10:00", "close": "21:00"}], "2025-11-23": [{"open": "10:00", "close": "21:00"}], "2025-11-25": [{"open": "17:00", "close": "23:00"}], "2025-11-26": [{"open": "17:00", "close": "23:00"}], "2025-11-27": [{"open": "17:00", "close": "23:00"}], "2025-11-28": [{"open": "17:00", "close": "23:00"}], "2025-11-29": [{"open": "10:00", "close": "21:00"}], "2025-11-30": [{"open": "10:00", "close": "21:00"}], "2025-12-02": [{"open": "17:00", "close": "23:00"}], "2025-12-03": [{"open": "17:00", "close": "23:00"}], "2025-12-04": [{"open": "17:00", "close": "23:00"}], "2025-12-05": [{"open": "17:00", "close": "23:00"}], "2025-12-06": [{"open": "10:00", "close": "21:00"}], "2025-12-07": [{"open": "10:00", "close": "21:00"}], "2025-12-09": [{"open": "17:00", "close": "23:00"}], "2025-12-10": [{"open": "17:00", "close": "23:00"}], "2025-12-11": [{"open": "17:00", "close": "23:00"}], "2025-12-12": [{"open": "17:00", "close": "23:00"}], "2025-12-13": [{"open": "10:00", "close": "21:00"}], "2025-12-14": [{"open": "10:00", "close": "21:00"}], "2025-12-16": [{"open": "17:00", "close": "23:00"}], "2025-12-17": [{"open": "17:00", "close": "23:00"}], "2025-12-18": [{"open": "17:00", "close": "23:00"}], "2025-12-19": [{"open": "17:00", "close": "23:00"}], "2025-12-20": [{"open": "10:00", "close": "21:00"}], "2025-12-21": [{"open": "10:00", "close": "21:00"}], "2025-12-23": [{"open": "17:00", "close": "23:00"}], "2025-12-24": [{"open": "17:00", "close": "23:00"}], "2025-12-25": [{"open": "17:00", "close": "23:00"}], "2025-12-26": [{"open": "17:00", "close": "23:00"}], "2025-12-27": [{"open": "10:00", "close": "21:00"}], "2025-12-28": [{"open": "10:00", "close": "21:00"}], "2025-12-30": [{"open": "17:00", "close": "23:00"}], "2025-12-31": [{"open": "17:00", "close": "23:00"}]}}</script>
  <script>
    (function() {
      if (!window.L) return;
      var MAP = (function() {
        try { return map; } catch(e) { 
          for (var k in window) { if (window[k] && window[k] instanceof L.Map) return window[k]; }
          return null;
        }
      })();
      try { if (typeof window !== 'undefined') window.MAP = MAP; } catch(e) {}
      if (!MAP) return;

      const JST = 'Asia/Tokyo';
      function parseHHMM(s) {
        if (!s) return null;
        const m = String(s).match(/^(\d{1,2}):(\d{2})$/);
        if (!m) return null;
        return { h: +m[1], m: +m[2] };
      }
      function minutes(t) { return t.h*60 + t.m; }
      function localNow() {
        const now = new Date();
        const p = new Intl.DateTimeFormat('ja-JP', {
          timeZone: JST, hour12: false,
          year:'numeric', month:'2-digit', day:'2-digit',
          hour:'2-digit', minute:'2-digit'
        }).formatToParts(now).reduce((a,p)=> (a[p.type]=p.value, a),{});
        return { date: p.year+'-'+p.month+'-'+p.day, time: p.hour+':'+p.minute };
      }
      const CAL = (function() { try { return JSON.parse(document.getElementById('openCalendar').textContent); } catch(e) { return {}; } })();

      function todaysSlots(name) {
        const now = localNow();
        const fac = CAL[name];
        if (!fac) return [];
        return Array.isArray(fac[now.date]) ? fac[now.date] : [];
      }
      function openStatus(slots) {
        if (!slots || slots.length===0) return { label: '休業', open: false, times: [] };
        const now = localNow();
        const t = parseHHMM(now.time);
        if (!t) return { label: '不明', open: null, times: slots };
        const n0 = minutes(t);
        let opened = false;
        for (const s of slots) {
          const o = parseHHMM(s.open), c = parseHHMM(s.close);
          if (!o || !c) continue;
          let a = minutes(o), b = minutes(c);
          if (b <= a) b += 24*60;
          let n = n0;
          if (n < a) n += 24*60;
          if (a <= n && n <= b) { opened = true; break; }
        }
        return { label: opened ? '営業中' : '営業時間外', open: opened, times: slots };
      }

      function parkingText(f) { if (typeof f.parking === 'boolean') return f.parking ? '有' : '無'; if (typeof f.parking === 'string') return f.parking; return '—'; }

      function timesLabel(slots) {
        if (!slots || slots.length===0) return '—';
        const anyAll = slots.some(s=>s._allDay);
        if (anyAll) return '時間未設定（営業）';
        return slots.map(s => s.open + '–' + s.close).join('、');
      }
      function statusSpan(st) {
        return `<span style="font-weight:600">公式ページ参照</span>`;
      }

      
// === Icons + featuresText (scoped before popupHtml) ===
const ICONS = {
  "ウォータージャンプ": "./icons/water.png",
  "ジブ": "./icons/rail.png",
  "グラトリ": "./icons/guratoli.png",
  "エアバッグ": "./icons/airmat_airbag.png",
  "エアマット": "./icons/airmat_airbag.png"
};
function featuresText(f) {
  const arr = Array.isArray(f?.features) ? f.features : [];
  if (!arr.length) return "";
  return arr.map(x => {
    const src = ICONS[x];
    return src ? `<img src="${src}" alt="${x}" title="${x}" style="width:20px;height:20px;vertical-align:middle;margin-left:4px;">` : "";
  }).join("");
}

// Rentals helper must exist before popupHtml is executed
const getRentals = (function(){
  if (typeof window !== 'undefined' && typeof window.getRentals === 'function') return window.getRentals;
  return function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var preset = (typeof window !== 'undefined' && window.RENTALS_OF && f) ? window.RENTALS_OF[f.name] : undefined;
      return Array.isArray(preset) ? preset : [];
    } catch(e) { return []; }
  };
})();
if (typeof window !== 'undefined' && !window.getRentals) { window.getRentals = getRentals; }

function popupHtml(f) {
        const slots = todaysSlots(f.name);
        const parkRaw = parkingText(f);
        const parkTxt = (f && f.name && /S-?AIR/i.test(f.name))
          ? String(parkRaw||'').replace(/[（(]?西武園P[)）]?/g, '（時間によって無料）')
          : parkRaw;
        const gmapDir = 'https://www.google.com/maps/dir/?api=1&destination=' + f.lat + ',' + f.lon;
        const logoSrc = (f.icon_data_uri && f.icon_data_uri.length > 10) ? f.icon_data_uri : '';
        const logoHtml = logoSrc
          ? '<img src="' + logoSrc + '" alt="' + f.name + '">'
          : '<span class="pcard-logo-placeholder">📍</span>';
        // Feature icons
        const feats = Array.isArray(f.features) ? f.features : [];
        let featHtml = '';
        if (feats.length > 0) {
          featHtml = '<div class="pcard-features"><div class="pcard-features-title">設備・特徴</div>' +
            feats.map(function(x){
              var src = ICONS[x];
              return src ? '<div class="pcard-feat"><img src="'+src+'" alt="'+x+'" title="'+x+'"></div>' : '';
            }).join('') + '</div>';
        }
        return '<div class="pcard popup-card" data-fname="'+f.name+'">' +
          '<div class="pcard-header">' +
            '<div class="pcard-logo">' + logoHtml + '</div>' +
            '<div class="pcard-hinfo">' +
              '<div class="pcard-name">' + f.name + '</div>' +
              '<div class="pcard-area">' + (f.pref_city||'') + '</div>' +
              '<div class="pcard-badge">' + (f.type||'') + '</div>' +
            '</div>' +
            '<button type="button" class="pcard-close" onclick="try{var m=window.MAP||window.map;if(m)m.closePopup();}catch(e){}">&times;</button>' +
          '</div>' +
          '<div class="pcard-tabs">' +
            '<button type="button" class="pcard-tab active" data-tab="info">基本情報</button>' +
            '<button type="button" class="pcard-tab" data-tab="weather">天気</button>' +
            '<button type="button" class="pcard-tab" data-tab="crowd">混雑</button>' +
          '</div>' +
          /* === 基本情報タブ === */
          '<div class="pcard-panel active" data-panel="info">' +
            '<div class="pcard-row">' +
              '<div class="pcard-row-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg></div>' +
              '<div class="pcard-row-body"><div class="pcard-row-label">営業時間</div><div class="pcard-row-val">' + timesLabel(slots) + '</div></div>' +
            '</div>' +
            '<div class="pcard-row">' +
              '<div class="pcard-row-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17m-2 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0"/><path d="M17 17m-2 0a2 2 0 1 0 4 0a2 2 0 1 0-4 0"/><path d="M5 17H3v-6l2-5h9l4 5h1a2 2 0 0 1 2 2v4h-2"/><path d="M9 17h6"/></svg></div>' +
              '<div class="pcard-row-body"><div class="pcard-row-label">駐車場</div><div class="pcard-row-val">' + parkTxt + '</div></div>' +
            '</div>' +
            '<div class="pcard-row">' +
              '<div class="pcard-row-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg></div>' +
              '<div class="pcard-row-body"><div class="pcard-row-label">所在地</div><div class="pcard-row-val">' + (f.pref_city||'—') + '</div></div>' +
            '</div>' +
            featHtml +
          '</div>' +
          /* === 天気タブ === */
          '<div class="pcard-panel" data-panel="weather">' +
            '<div class="pcard-wx-header">' +
              '<div class="pcard-wx-title">時間別天気</div>' +
              '<div class="pcard-wx-arrows">' +
                '<button type="button" class="pcard-wx-arrow pcard-wx-prev" aria-label="前へ">&lsaquo;</button>' +
                '<button type="button" class="pcard-wx-arrow pcard-wx-next" aria-label="次へ">&rsaquo;</button>' +
              '</div>' +
            '</div>' +
            '<div class="wx-weather-inline" data-lat="'+f.lat+'" data-lon="'+f.lon+'">' +
              '<div class="wx-hrs pcard-wx-strip"><div class="wx-cell"><div class="wx-hour">--</div><div class="wx-emoji-box wx-default">—</div><div class="wx-temp"></div></div></div>' +
            '</div>' +
          '</div>' +
          /* === 混雑タブ === */
          '<div class="pcard-panel" data-panel="crowd">' +
            '<div class="pcard-crowd-header">' +
              '<div class="pcard-crowd-title">時間帯別の混み具合</div>' +
              '<div class="pcard-crowd-days">' +
                '<button type="button" class="pcard-crowd-day" data-day="0">月</button>' +
                '<button type="button" class="pcard-crowd-day" data-day="1">火</button>' +
                '<button type="button" class="pcard-crowd-day" data-day="2">水</button>' +
                '<button type="button" class="pcard-crowd-day" data-day="3">木</button>' +
                '<button type="button" class="pcard-crowd-day" data-day="4">金</button>' +
                '<button type="button" class="pcard-crowd-day" data-day="5">土</button>' +
                '<button type="button" class="pcard-crowd-day" data-day="6">日</button>' +
              '</div>' +
            '</div>' +
            '<div class="pcard-crowd-stage"></div>' +
            '<div class="cr-inline pcard-crowd-wrap" data-fname="'+f.name+'">' +
              '<div class="wx-hrs" style="display:none">—</div>' +
            '</div>' +
          '</div>' +
          /* === フッター === */
          '<div class="pcard-footer">' +
            '<a href="'+gmapDir+'" target="_blank" rel="noopener" class="pcard-btn pcard-btn-map">' +
              '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>' +
              'Googleマップで開く' +
            '</a>' +
            '<button type="button" class="pcard-btn pcard-btn-rental rental-toggle" aria-expanded="false">' +
              '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 7V5a4 4 0 00-8 0v2"/></svg>' +
              'レンタル' +
            '</button>' +
          '</div>' +
          '<div class="pcard-rental-box rental-box">読み込み中...</div>' +
        '</div>';
      }

      // Overlay markers (unchanged)
      
// === Method B: facilities features prefill (by name) ===
const ITEM_OF = {
  "ウォータージャンプ S-AIR": ["ウォータージャンプ","ジブ","グラトリ"],
  "小布施クエスト": ["エアバッグ","ジブ"],
  "埼玉クエスト": ["エアバッグ","ジブ"],
  "YAMAZEN AICHI QUEST": ["エアバッグ","ジブ"],
  "THE KINGS 札幌": ["エアマット","ジブ"],
  "SLAB OUTDOORPARK TATEYAMA": ["エアマット","ジブ"],
  "ISLET": ["エアマット","ジブ"],
  "Nico Emi Park": ["エアマット","ジブ"],
  "白馬さのさかWJ": ["ウォータージャンプ"],
  "長野BRUSH?": ["ジブ"],
  "埼玉BRUSH?": ["ジブ"],
  "湘南BRUSH?": ["ジブ"],
  "千葉さくらBRUSH?": ["ジブ"],
  "ウォータージャンプ K-air": ["ウォータージャンプ","ジブ"],
  "FOUR SNOW TOKAI": ["エアマット","ジブ"],
  "THE KINGS 千葉": ["エアマット","ジブ"]
};

const facs = (typeof facilities !== 'undefined' && Array.isArray(facilities)) ? facilities : [];
      
// Prefill features so popupHtml -> featuresText(f) shows items
for (const f of facs) {
  if (ITEM_OF[f.name]) f.features = ITEM_OF[f.name];
  // Normalize BRUSH? type label
  try {
    if (typeof f.name === 'string' && /BRUSH\?/.test(f.name)) {
      f.type = 'ブラシ（ジブ＋フリーラン）';
    }
  } catch(e){}
}

// --- overlap fix: if two facilities are very close (< ~2km), nudge apart (1/5 of previous) ---
(function(){
  try {
    const byName = n => (Array.isArray(facs) ? facs : []).find(f => f && f.name === n);
    const obuse = byName('小布施クエスト');
    const brush = byName('長野BRUSH?');
    if (obuse && brush && typeof obuse.lat==='number' && typeof obuse.lon==='number' && typeof brush.lat==='number' && typeof brush.lon==='number') {
      const toRad = x => x * Math.PI / 180;
      const R = 6371000; // meters
      const dLat = toRad(brush.lat - obuse.lat);
      const dLon = toRad(brush.lon - obuse.lon);
      const a = Math.sin(dLat/2)**2 + Math.cos(toRad(obuse.lat)) * Math.cos(toRad(brush.lat)) * Math.sin(dLon/2)**2;
      const dist = 2 * R * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      if (dist < 2000) {
        const dLonOffset = 0.0500;  // ≈5.5km (lon)
        const dLatOffset = 0.0250;  // ≈2.8km (lat)
        obuse.lon += dLonOffset;  brush.lon -= dLonOffset;
        obuse.lat += dLatOffset;  brush.lat -= dLatOffset;
      }
    }
  } catch(e) {}
})();

const overlayLayer = L.layerGroup().addTo(MAP);
      const maskIcon = L.divIcon({
        html: '<div></div>',
        className: 'hours-overlay mask',
        iconSize: [60, 60],
        iconAnchor: [30, 60]
      });
      // Variants for specific facilities (mask text F/Y)
      const maskIconF = L.divIcon({
        html: '<div></div>',
        className: 'hours-overlay mask f',
        iconSize: [60, 60],
        iconAnchor: [30, 60]
      });
      const maskIconY = L.divIcon({
        html: '<div></div>',
        className: 'hours-overlay mask y',
        iconSize: [60, 60],
        iconAnchor: [30, 60]
      });
      const clearIcon = L.divIcon({
        html: '<div></div>',
        className: 'hours-overlay clear',
        iconSize: [60, 60],
        iconAnchor: [30, 60]
      });
      // --- helpers: white-rim circle icon + facility name checks (global scope here) ---
      function makeCircleIcon(src, alt) {
        var html =
          '<div style="pointer-events:auto;width:60px;height:60px;position:relative;">' +
            '<div style="position:absolute;top:4px;left:50%;transform:translateX(-50%);width:52px;height:52px;border-radius:50%;background:#fff;border:2px solid #bdbdbd;box-sizing:border-box;">' +
              '<div style="position:absolute;inset:3px;border-radius:50%;overflow:hidden;background:#fff;">' +
                '<img src=\"'+src+'\" alt=\"'+(alt||'logo')+'\" loading=\"eager\" decoding=\"sync\" fetchpriority=\"high\" style=\"width:100%;height:100%;object-fit:contain;display:block;\" />' +
              '</div>' +
            '</div>' +
          '</div>';
        return L.divIcon({ html: html, className: 'hours-overlay', iconSize: [60, 60], iconAnchor: [30, 60] });
      }
      function isSAirName(name){
        var s = String(name||'').toLowerCase().replace(/[\s\u3000\-\_・（）()]/g,'');
        return s.indexOf('sair')>=0;
      }
      function isKingsChibaName(name){
        var s = String(name||'').toLowerCase().replace(/[\s\u3000\-\_・（）()]/g,'');
        return (
          s.indexOf('thekingschiba')>=0 ||
          s.indexOf('kingschiba')>=0 ||
          s.indexOf('chibakings')>=0 ||
          s.indexOf('kings千葉')>=0 ||
          s.indexOf('千葉kings')>=0
        );
      }
      function isFourSnowTokaiName(name){
        var s = String(name||'').toLowerCase().replace(/[\s\u3000\-\_・（）()]/g,'');
        var jp = s.replace(/quest/g,'クエスト');
        var en = s.replace(/クエスト/g,'quest');
        if (
          en.indexOf('foursnowtokai')>=0 ||
          en.indexOf('forsnowtokai')>=0 ||
          (en.indexOf('foursnow')>=0 && en.indexOf('tokai')>=0) ||
          (en.indexOf('forsnow')>=0 && en.indexOf('tokai')>=0) ||
          jp.indexOf('フォースノー東海')>=0 ||
          (jp.indexOf('フォースノー')>=0 && (jp.indexOf('東海')>=0 || jp.indexOf('トーカイ')>=0))
        ) return true;
        return false;
      }
      function isYamazenaichiQuestName(name){
        var s = String(name||'').toLowerCase().replace(/[\s\u3000\-\_・（）()]/g,'');
        var en = s.replace(/クエスト/g,'quest');
        return en.indexOf('yamazenaichiquest')>=0;
      }
      function needMask(name){
        // 表記揺れに強い判定（空白/全角空白/記号/英日クエスト）
        var base = String(name||'').toLowerCase()
          .replace(/[\s　]+/g,'')
          .replace(/[（）()]/g,'')
          .replace(/[\-_.・]/g,'');
        var jp = base.replace(/quest/g,'クエスト');
        var en = base.replace(/クエスト/g,'quest');
        if (jp.includes('埼玉クエスト')) return false;
        if (en.includes('yamazenaichiquest')) return true; // YAMAZEN AICHI QUEST
        // FOUR SNOW TOKAI（表記ゆれ対策）
        var isFourSnowTokaiEn =
          en.includes('foursnowtokai') ||
          en.includes('forsnowtokai') ||
          (en.includes('foursnow') && en.includes('tokai')) ||
          (en.includes('forsnow') && en.includes('tokai'));
        var isFourSnowTokaiJp =
          jp.includes('フォースノー東海') ||
          (jp.includes('フォースノー') && (jp.includes('東海') || jp.includes('トーカイ')));
        if (isFourSnowTokaiEn || isFourSnowTokaiJp) return true;
        // THE KINGS 千葉はマスク対象外
        return false;
      }

      // BRUSH? 4施設（長野/埼玉/湘南/千葉さくら）は丸写真をロゴに統一
      function isBrushPark(name){
        var s = String(name||'').toLowerCase()
          .replace(/[\s　]+/g,'')
          .replace(/[（）()]/g,'')
          .replace(/[\-_.・]/g,'');
        // 表記ゆれ対応
        var sJ = s.replace(/brush\?/g,'ブラッシュ').replace(/sakura/g,'さくら');
        return (
          sJ.includes('長野ブラッシュ') ||
          sJ.includes('埼玉ブラッシュ') ||
          sJ.includes('湘南ブラッシュ') ||
          sJ.includes('千葉さくらブラッシュ')
        );
      }

      // 適用（レイヤ追加/ポップオープン時にも補正）
      (function(){

        // 任意の画像を白い丸枠付きで表示するアイコン
        function getCircleImageIcon(src, alt){
          var key = '__CIRCLE_ICON__' + src;
          if (window[key]) return window[key];
          var html =
            '<div style="pointer-events:auto;width:60px;height:60px;position:relative;">' +
              '<div style="position:absolute;top:4px;left:50%;transform:translateX(-50%);width:52px;height:52px;border-radius:50%;background:#fff;border:2px solid #bdbdbd;box-sizing:border-box;">' +
                '<div style="position:absolute;inset:3px;border-radius:50%;overflow:hidden;background:#fff;">' +
                  '<img src=\"'+src+'\" alt=\"'+(alt||'logo')+'\" loading=\"eager\" decoding=\"sync\" fetchpriority=\"high\" style=\"width:100%;height:100%;object-fit:contain;display:block;\"/>' +
                '</div>' +
              '</div>' +
            '</div>';
          window[key] = L.divIcon({ html: html, className: 'hours-overlay', iconSize: [60,60], iconAnchor: [30,60] });
          return window[key];
        }

        function isSAIR(name){
          var s = String(name||'').toLowerCase().replace(/[\s\u3000\-\_・（）()]/g,'');
          return s.indexOf('sair')>=0;
        }
        function isKingsChiba(name){
          var s = String(name||'').toLowerCase().replace(/[\s\u3000\-\_・（）()]/g,'');
          return s.indexOf('thekingschiba')>=0 || s.indexOf('kings千葉')>=0 || s.indexOf('千葉kings')>=0;
        }

        function bestFacilityForLayer(layer){
          var facsList = (typeof facs !== 'undefined' && Array.isArray(facs)) ? facs
                         : (Array.isArray(window.facilities) ? window.facilities : []);
          if (!Array.isArray(facsList) || facsList.length === 0) return null;
          var ll = layer && typeof layer.getLatLng==='function' ? layer.getLatLng() : null;
          var best = null;
          for (var i=0;i<facsList.length;i++){
            var f = facsList[i];
            if (!f || typeof f.lat !== 'number' || typeof f.lon !== 'number') continue;
            if (layer && layer.options && layer.options.title === f.name){ best = f; break; }
            if (ll){
              var d = Math.abs(ll.lat - f.lat) + Math.abs(ll.lng - f.lon);
              if (d < 0.02){ best = f; break; }
            }
          }
          return best;
        }

        function applyBrushIcon(layer){
          if (!layer || typeof layer.setIcon !== 'function') return;
          // ここではオーバーレイ用マーカー（className に 'hours-overlay' を含む）だけを対象にする
          try {
            var cls = layer && layer.options && layer.options.icon && layer.options.icon.options
              ? String(layer.options.icon.options.className || '')
              : '';
            if (!/\bhours-overlay\b/.test(cls)) return;
          } catch(_) {}
          var fac = bestFacilityForLayer(layer);
          if (!fac) return;
          if (!isBrushPark(fac.name)) return;
          try { layer.setIcon(clearIcon); } catch(e){}
          try {
            // Ensure main popup is bound with our rich content
            var cur = (layer.getPopup && layer.getPopup());
            var curHtml = cur && cur.getContent ? String(cur.getContent()) : '';
            if (!/popup-card/.test(curHtml)) {
              layer.bindPopup(popupHtml(fac), { autoPanPaddingTopLeft: L.point(20, 320), autoPanPaddingBottomRight: L.point(20, 20) });
            }
          } catch(_){}
        }

        if (window.MAP && typeof window.MAP.on === 'function'){
          try{
            MAP.on('layeradd', function(e){ applyBrushIcon(e.layer); });
            MAP.on('popupopen', function(e){ if (e && e.popup && e.popup._source) applyBrushIcon(e.popup._source); });
          }catch(_){}
        }
      })();

      function __buildOverlayMarkers(){
        for (const f of facs) {
        if (typeof f.lat!=='number' || typeof f.lon!=='number') continue;
        // 指定2施設はオーバーレイを生成しない（透明化＝描画スキップ）
        try {
          if (isYamazenaichiQuestName(f.name) || isFourSnowTokaiName(f.name)) {
            continue;
          }
        } catch(_){}
        var masked = needMask(f.name);
        let iconToUse = masked ? (isFourSnowTokaiName(f.name) ? maskIconF : (isYamazenaichiQuestName(f.name) ? maskIconY : maskIcon)) : clearIcon; // 非対象は透明オーバーレイ
        // S-AIR / THE KINGS千葉 / BRUSH? を最新ロゴの丸アイコンに差し替え
        if (isSAirName(f.name)) {
          iconToUse = makeCircleIcon('./icons/sair_logo.png','S-AIR');
        } else if (isKingsChibaName(f.name)) {
          iconToUse = makeCircleIcon('./icons/kingschiba_logo.jpg','THE KINGS CHIBA');
        } else if (isBrushPark(f.name)) {
          iconToUse = clearIcon;
        }
        const marker = L.marker([f.lat, f.lon], {
          icon: iconToUse,
          opacity: 1,
          zIndexOffset: 10000,
          riseOnHover: true,
          bubblingMouseEvents: true,
          keyboard: false,
          title: f.name
        }).addTo(overlayLayer);
        marker.bindPopup(popupHtml(f), { autoPanPaddingTopLeft: L.point(20, 320), autoPanPaddingBottomRight: L.point(20, 20) });
        // ピンをタップしたら穏やかにズーム（上バー分を考慮して下方向へずらす）
        try {
          marker.on('click', function(){
            try {
              var ll = this.getLatLng && this.getLatLng();
              if (ll && MAP) {
                var cur = (typeof MAP.getZoom === 'function') ? MAP.getZoom() : null;
                var z = (typeof cur === 'number' ? cur : 9);
                if (z < 9) z = 9;
                // ヘッダー+フィルターバー+余裕 = 約220px分を上方向にオフセット
                var offsetPx = 320;
                try {
                  var zForProject = z;
                  var pt = MAP.project(ll, zForProject);
                  var pt2 = L.point(pt.x, pt.y - offsetPx);
                  var ll2 = MAP.unproject(pt2, zForProject);
                  if (typeof MAP.setView === 'function') {
                    MAP.setView(ll2, z, { animate: true });
                  } else if (typeof MAP.panTo === 'function') {
                    MAP.panTo(ll2, { animate: true });
                  }
                } catch(_){
                  if (typeof MAP.setView === 'function') {
                    MAP.setView(ll, z, { animate: true });
                    try { setTimeout(function(){ if (MAP && typeof MAP.panBy==='function') MAP.panBy([0, -offsetPx], { animate:true }); }, 250); } catch(__){}
                  }
                }
              } 
            } catch(e) {}
          });
        } catch(e) {}
        }
      }
      // Defer heavy overlay build for faster first paint
      try {
        if (window.LITE_BOOT && window.requestIdleCallback) {
          requestIdleCallback(__buildOverlayMarkers, { timeout: 800 });
        } else if (window.LITE_BOOT) {
          setTimeout(__buildOverlayMarkers, 0);
        } else {
          __buildOverlayMarkers();
        }
      } catch(e) { setTimeout(__buildOverlayMarkers, 0); }
      overlayLayer.eachLayer(layer => { if (layer.bringToFront) layer.bringToFront(); });
    })();
  </script>
  <script>
  (function(){
    try {
      function isMarker(layer){ return layer && typeof layer.getLatLng === 'function' && !!layer._icon; }
      function ensureMainPopups(){
        if (typeof window === 'undefined' || !window.MAP) return;
        var facsList = (typeof facs !== 'undefined' && Array.isArray(facs)) ? facs
                       : (Array.isArray(window.facilities) ? window.facilities : []);
        var overlaySet = new Set();
        if (typeof overlayLayer !== 'undefined' && overlayLayer && overlayLayer.eachLayer){
          overlayLayer.eachLayer(function(l){ overlaySet.add(l); });
        }
        MAP.eachLayer(function(layer){
          if (!isMarker(layer)) return;
          if (overlaySet.has(layer)) return; // オーバーレイ側は既にbindPopup済み
          var ll = (layer.getLatLng && layer.getLatLng());
          if (!ll) return;
          var match = null;
          for (var i=0;i<facsList.length;i++){
            var f = facsList[i];
            if (!f || typeof f.lat !== 'number' || typeof f.lon !== 'number') continue;
            if (layer.options && layer.options.title === f.name){ match = f; break; }
            var d = Math.abs(ll.lat - f.lat) + Math.abs(ll.lng - f.lon);
            if (d < 0.02){ match = f; break; } // おおよそ1〜2km以内
          }
          if (!match) return;
          var cur = (layer.getPopup && layer.getPopup && layer.getPopup());
          var curHtml = cur && cur.getContent ? String(cur.getContent()) : '';
          if (!/popup-card/.test(curHtml)){
            layer.bindPopup(popupHtml(match), { autoPanPaddingTopLeft: L.point(20, 320), autoPanPaddingBottomRight: L.point(20, 20) });
            if (layer.options) layer.options.title = match.name;
          }
        });
      }
      function ensureOnMarker(layer, openedPopup){
        try{
          if (!isMarker(layer)) return;
          var overlaySet = new Set();
          if (typeof overlayLayer !== 'undefined' && overlayLayer && overlayLayer.eachLayer){
            overlayLayer.eachLayer(function(l){ overlaySet.add(l); });
          }
          if (overlaySet.has(layer)) return;
          var facsList = (typeof facs !== 'undefined' && Array.isArray(facs)) ? facs
                         : (Array.isArray(window.facilities) ? window.facilities : []);
          var ll = layer.getLatLng && layer.getLatLng();
          if (!ll) return;
          var best=null, bestD=1e9;
          for (var i=0;i<facsList.length;i++){
            var f=facsList[i];
            if (!f || typeof f.lat!=='number' || typeof f.lon!=='number') continue;
            var d=Math.abs(ll.lat-f.lat)+Math.abs(ll.lng-f.lon);
            if (d<bestD){ bestD=d; best=f; }
          }
          if (!best) return;
          var cur = openedPopup || (layer.getPopup && layer.getPopup());
          var curHtml = cur && cur.getContent ? String(cur.getContent()) : '';
          if (/popup-card/.test(curHtml)) {
            // already full popup; still try to load inline weather
            try {
              var root1 = (cur && typeof cur.getElement==='function') ? cur.getElement() : null;
              var el1 = root1 ? root1.querySelector('.wx-weather-inline') : null;
              if (el1 && window.loadPopupWeatherInline) { window.loadPopupWeatherInline(el1); }
              var cr1 = root1 ? root1.querySelector('.cr-inline') : null;
              if (cr1 && window.loadPopupCrowdInline) { window.loadPopupCrowdInline(cr1); }
            } catch(_){}
            return;
          }
          var html = popupHtml(best);
          if (cur && typeof cur.setContent === 'function') { 
            cur.setContent(html); 
            if (typeof cur.update==='function') cur.update(); 
            try {
              var root2 = (cur && typeof cur.getElement==='function') ? cur.getElement() : null;
              var el2 = root2 ? root2.querySelector('.wx-weather-inline') : null;
              if (el2 && window.loadPopupWeatherInline) { setTimeout(function(){ window.loadPopupWeatherInline(el2); }, 0); }
              var cr2 = root2 ? root2.querySelector('.cr-inline') : null;
              if (cr2 && window.loadPopupCrowdInline) { setTimeout(function(){ window.loadPopupCrowdInline(cr2); }, 0); }
            } catch(_){}
          }
          else { 
            layer.bindPopup(html); 
            try {
              var p = layer.getPopup && layer.getPopup();
              var root3 = (p && typeof p.getElement==='function') ? p.getElement() : null;
              var el3 = root3 ? root3.querySelector('.wx-weather-inline') : null;
              if (el3 && window.loadPopupWeatherInline) { setTimeout(function(){ window.loadPopupWeatherInline(el3); }, 0); }
              var cr3 = root3 ? root3.querySelector('.cr-inline') : null;
              if (cr3 && window.loadPopupCrowdInline) { setTimeout(function(){ window.loadPopupCrowdInline(cr3); }, 0); }
            } catch(_){}
          }
          if (layer.options) layer.options.title = best.name;
        }catch(e){}
      }
      if (document.readyState === 'complete') { setTimeout(ensureMainPopups, 0); }
      else { window.addEventListener('load', function(){ setTimeout(ensureMainPopups, 0); }); }
      setTimeout(ensureMainPopups, 1200);
      if (window.MAP && typeof window.MAP.on === 'function'){
        MAP.on('layeradd', function(e){ ensureOnMarker(e.layer); });
        MAP.on('popupopen', function(e){ ensureOnMarker(e.popup && e.popup._source, e.popup); });
      }
    } catch(e) {}
  })();
  </script>
  <script>
  // Load rentals.csv if present and build window.RENTALS_OF
  var __rentalsReady = null;
  function ensureRentalsReady(){
    if (__rentalsReady) return __rentalsReady;
    __rentalsReady = new Promise(function(resolve){
      // if already populated
      if (window.RENTALS_OF && Object.keys(window.RENTALS_OF).length) { resolve(); return; }
      // poll for a short time in case fetch is in-flight
      var t0 = Date.now();
      (function wait(){
        if (window.RENTALS_OF && Object.keys(window.RENTALS_OF).length) { resolve(); return; }
        if (Date.now() - t0 > 3000) { resolve(); return; }
        setTimeout(wait, 100);
      })();
    });
    return __rentalsReady;
  }

  (function(){
    async function loadCsv(){
      try {
        const res = await fetch('rentals.csv', { cache: 'no-store' });
        if (!res.ok) return;
        const txt = await res.text();
        const map = csvToMap(txt);
        if (map && Object.keys(map).length) {
          window.RENTALS_OF = Object.assign(window.RENTALS_OF || {}, map);
        }
      } catch(e) {}
    }
    function csvToMap(text){
      // robust CSV parser for UTF-8 with header
      const lines = text.split(/\r?\n/).filter(l=>l.trim().length>0);
      if (!lines.length) return {};
      const header = splitCSV(lines[0]);
      // name column detection (avoid picking No./番号 columns)
      const badHeaderRe = /^(?:no\.?|番号|id|code)$/i;
      let nameIdx = header.findIndex(h => (/施設|名称|name/i).test(h) && !badHeaderRe.test(h));
      if (nameIdx < 0) {
        // heuristic: choose the column that has most non-numeric text in first 20 rows
        const rows = lines.slice(1, Math.min(lines.length, 21)).map(splitCSV);
        let bestIdx = -1, bestScore = -1;
        for (let c = 0; c < header.length; c++) {
          if (badHeaderRe.test(header[c]||'')) continue;
          let score = 0;
          for (const r of rows) {
            const cell = (r[c]||'').trim();
            if (!cell) continue;
            if (/[A-Za-z\u3040-\u30FF\u4E00-\u9FFF]/.test(cell) && !/^\d+$/.test(cell)) score++;
          }
          if (score > bestScore) { bestScore = score; bestIdx = c; }
        }
        nameIdx = bestIdx >= 0 ? bestIdx : 0;
      }
      const out = {};
      const POS = /^(?:○|◯|〇|有|あり|可|yes|true|1|対応|貸出|レンタル可)$/i;
      for (let i=1;i<lines.length;i++){
        const cols = splitCSV(lines[i]);
        if (nameIdx < 0 || nameIdx >= cols.length) continue;
        const name = (cols[nameIdx]||'').trim();
        if (!name) continue;
        const items = [];
        for (let c=0;c<header.length;c++){
          if (c === nameIdx) continue;
          const label = (header[c]||'').trim();
          if (!label) continue;
          const cell = (cols[c]||'').trim();
          if (!cell) continue;
          if (POS.test(cell)) {
            items.push(label);
            continue;
          }
          // free-text list in cell
          const parts = cell.split(/[、,，;；\s]+/).map(s=>s.trim()).filter(Boolean);
          if (parts.length) {
            // if parts look like markers only, skip; else treat as items
            const allMarkers = parts.every(p => POS.test(p));
            if (!allMarkers) items.push(...parts);
          }
        }
        if (items.length) out[name] = Array.from(new Set(items));
      }
      return out;
    }
    function splitCSV(line){
      const out=[]; let cur=''; let q=false;
      for (let i=0;i<line.length;i++){
        const c=line[i];
        if (q){
          if (c==='"' && line[i+1]==='"'){ cur+='"'; i++; }
          else if (c==='"'){ q=false; }
          else{ cur+=c; }
        } else {
          if (c==='"'){ q=true; }
          else if (c===','){ out.push(cur); cur=''; }
          else { cur+=c; }
        }
      }
      out.push(cur);
      return out;
    }
    loadCsv();
  })();
  </script>
  
  <div id="weather-panel" style="display:none">
    <div class="wx-hdr">
      <h2>現在の天気</h2>
      <div style="display:flex;align-items:center;gap:6px">
        <div class="wx-now" id="wx-now"></div>
        <button id="wx-toggle" class="wx-collapse" type="button">▲ 折りたたむ</button>
      </div>
    </div>
    <div id="weather-list"></div>
  </div>
  <!-- congestion panel -->
  <div id="crowd-panel" style="display:none">
    <div class="wx-hdr">
      <h2>混雑状況</h2>
      <div style="display:flex;align-items:center;gap:6px">
        <button id="crowd-toggle" class="wx-collapse" type="button">▼ ひらく</button>
      </div>
    </div>
    <div id="crowd-list"><div class="wx-item">準備中</div></div>
  </div>
  <!-- brand logo is outside #map; hidden via JS when popup is open -->
  <style>.hours-overlay { pointer-events:auto; width:60px; height:60px; border-radius:50%; position: relative; box-sizing: border-box; }
.hours-overlay.mask { background: rgba(150,150,150,1); border: 1px solid #bdbdbd; }
.hours-overlay.clear { background: transparent; border: none; }
.hours-overlay::before { display:none; }
.hours-overlay:not(.clear)::before { content:""; position:absolute; left:50%; bottom:-8px; transform:translateX(-50%); width:0; height:0; border-left:7px solid transparent; border-right:7px solid transparent; border-top:10px solid #10b981; filter: drop-shadow(0 2px 1px rgba(0,0,0,.25)); }
.hours-overlay.mask::after { content: "ロゴ"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #fff; font-weight: 700; font-size: 14px; line-height: 1; text-shadow: 0 1px 2px rgba(0,0,0,.3); pointer-events: none; }
.hours-overlay.mask.f::after { content: "F"; }
.hours-overlay.mask.y::after { content: "Y"; }
/* map background (ocean) removed to avoid tinting land */
/* name-icons (icons next to facility name) */
.name-icons { margin-left: .25rem; vertical-align: middle; }
.name-icons img { vertical-align: middle; margin-left: 4px; }

/* 強制非表示（安全網）: 指定2施設のベースピンをCSSでも隠す */
.leaflet-marker-icon[title*="YAMAZEN"]{ display:none !important; }
.leaflet-marker-icon[title*="FOUR SNOW"]{ display:none !important; }
.leaflet-marker-icon[title*="FOURSNOW"]{ display:none !important; }
.leaflet-marker-icon[title*="TOKAI"][title*="FOUR"]{ display:none !important; }

/* top-right brand logo */
#brand-logo { position: fixed; bottom: 12px; right: 12px; z-index: 5000; user-select: none; mix-blend-mode: multiply; opacity: 1; filter: drop-shadow(0 0 0 rgba(0,0,0,0)); pointer-events: auto; cursor: pointer; transition: opacity .2s; }
#brand-logo.popup-open { opacity: 0; pointer-events: none; }
#brand-logo img { width: 180px; height: auto; display: block; }

/* region zoom buttons (top-left) */
.region-zoom { position: fixed; left: 12px; top: 12px; z-index: 10060; display: flex; gap: 8px; background: rgba(255,255,255,.96); border: 1px solid #e5e7eb; border-radius: 10px; padding: 6px 8px; backdrop-filter: blur(2px); }
.region-zoom .rz-btn { appearance: none; border: 1px solid #d1d5db; background: #fff; color: #111; border-radius: 8px; padding: 6px 10px; font-size: 12px; cursor: pointer; }
.region-zoom .rz-btn:hover { background: #f3f4f6; }
.region-zoom .rz-btn:focus { outline: none; box-shadow: 0 0 0 2px rgba(59,130,246,.35); }

/* weather panel */
#weather-panel, #crowd-panel { position: fixed; left: 12px; top: 12px; width: 300px; max-height: calc(100% - 24px); overflow: auto; background: rgba(255,255,255,.96); backdrop-filter: blur(2px); border: 1px solid #e5e7eb; border-radius: 10px; box-shadow: 0 6px 20px rgba(0,0,0,.15); padding: 10px 12px; z-index: 10050; font-size: 14px; color: #111; font-family: 'M PLUS Rounded 1c','Hiragino Maru Gothic ProN','Kosugi Maru',system-ui,sans-serif; }
#weather-panel h2, #crowd-panel h2 { margin: 0; font-size: 16px; }
#weather-panel .wx-hdr, #crowd-panel .wx-hdr { display:flex; align-items:center; justify-content:space-between; gap:8px; margin: 0 0 8px; }
#weather-panel .wx-now { font-size: 12px; color: #374151; white-space: nowrap; }
#weather-panel.collapsed #weather-list { display: none; }
#crowd-panel.collapsed #crowd-list { display: none; }
.wx-collapse { width: auto; margin-top: 0; margin-left: 6px; background: #f3f4f6; border: 1px solid #e5e7eb; border-radius: 8px; padding: 4px 8px; cursor: pointer; font-size: 12px; color: #111; }
#weather-list { display: grid; grid-template-columns: 1fr; gap: 6px; }
.wx-item { padding: 6px 8px; border: 1px solid #eee; border-radius: 8px; background:#fff; }
#weather-list .wx-item:nth-child(even),
#crowd-list .wx-item:nth-child(even) { background:#f5f6f7; }
.wx-item .wx-name { font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wx-head { display:flex; align-items:center; justify-content:flex-start; gap:8px; margin-bottom: 4px; }
.wx-f-toggle { background:transparent; border:none; padding:0 4px; font-size:14px; cursor:pointer; color:#6b7280; }
.wx-f-toggle:focus { outline: none; }
.wx-f-toggle:hover { color:#4b5563; }
.wx-hrs { display:flex; gap:6px; overflow-x:auto; padding:8px; background:#fff; border-radius:12px; border:1px solid #e5e7eb; }
.wx-hrs { -ms-overflow-style: none; scrollbar-width: none; }
.wx-hrs::-webkit-scrollbar { display: none; }
.wx-item.collapsed .wx-hrs { display:none; }
.wx-cell { width:46px; text-align:center; }
.wx-hour { font-size:11px; color:#6b7280; }
.wx-emoji-box { background:transparent !important; border:none !important; border-radius:0 !important; padding:0 !important; color:inherit; font-size:18px; margin-top:2px; box-shadow:none !important; }
.wx-temp { font-size:12px; color:#111; margin-top:2px; }
.wx-sunny, .wx-cloudy, .wx-rain, .wx-snow, .wx-default, .wx-thunder { background:transparent !important; }
/* Compact the vertical height for left-side panels */
#weather-panel .wx-head, #crowd-panel .wx-head { margin-bottom: 2px; }
#weather-panel .wx-hrs { padding:6px; }
#weather-panel .wx-cell { width:40px; }
#weather-panel .wx-emoji-box { font-size:16px; }
#weather-panel .wx-hour { font-size:10px; }
#weather-panel .wx-temp { font-size:11px; }
#crowd-panel .cr-week { --cr-bar-w:20px; --cr-gap:10px; }
#crowd-panel .cr-col { height:42px; }
#crowd-panel .cr-daywrap { padding:6px; }
#crowd-panel .cr-slot { font-size:9px; }

/* inline weather in popup (reuse wx-hrs styles, add label) */
.wx-inline { display:flex; align-items:center; gap:8px; margin-top:4px; }
.popup-card { --label-w: auto; }
/* In popup, use CSS grid to lock columns: [label | colon | value] */
.popup-card .wx-inline { display:grid; grid-template-columns: var(--label-w) 1em 1fr; column-gap:8px; align-items:center; }
.wx-inline .wx-title { font-size:12px; color:#374151; white-space:nowrap; }
/* Title text: justify per character to fill column width */
.popup-card .wx-title { 
  display:inline-block;
  margin-right:0;
  text-align: justify;
  text-align-last: justify;
  text-justify: inter-character;
  letter-spacing: 0;
}
.popup-card .wx-title::after { content:''; display:inline-block; width:100%; }
/* During measurement, disable the pseudo element to avoid affecting width calc */
.popup-card.no-justify .wx-title::after { content:none; }
.popup-card .wx-colon { display:block; text-align:center; }
/* Allow hours boxes to fill the remaining popup width */
.popup-card .wx-inline .wx-hrs { flex: 1 1 auto; }

/* crowd chart */
.cr-week { display:flex; gap:20px; align-items:flex-end; width:max-content; --cr-bar-w:24px; --cr-gap:12px; --cr-color:#22b8b8; }
.cr-daywrap { display:flex; flex-direction:column; align-items:center; gap:4px; border:1px solid #e5e7eb; border-radius:8px; padding:6px 8px; background:#fff; }
.cr-col { display:flex; gap:var(--cr-gap); align-items:flex-end; height:48px; width: calc(var(--cr-bar-w)*4 + var(--cr-gap)*3); position:relative; }
.cr-bar { width:var(--cr-bar-w); border-radius:12px 12px 0 0; background: var(--cr-color); position: relative; z-index: 1; }
.cr-lvl-0 { height:3px; background:#d1d5db !important; filter:none; }
.cr-lvl-1 { height:12px; filter: brightness(1.15); }
.cr-lvl-2 { height:24px; filter: brightness(1.00); }
.cr-lvl-3 { height:36px; filter: brightness(0.85); }
.cr-lvl-4 { height:46px; filter: brightness(0.70); }
.cr-day { font-size:11px; color:#6b7280; }
.cr-day-top { font-size:11px; color:#6b7280; margin-bottom:12px; font-weight:600; }
.cr-day-top.sat { color:#000; }
.cr-day-top.sun { color:#ef4444; }
.cr-slots { display:flex; justify-content:space-between; gap:0; align-items:flex-start; width: calc(var(--cr-bar-w)*4 + var(--cr-gap)*3); }
.cr-slot { width: var(--cr-bar-w); text-align:center; font-size:10px; color:#6b7280; white-space:nowrap; font-weight:300; font-variant-numeric: tabular-nums; display:inline-block; transform: translateX(-1px) scaleX(0.82); transform-origin: left center; line-height:1; }
.cr-now { position:absolute; top:-10px; bottom:12px; border-left:3px dashed #9ca3af; pointer-events:none; z-index:0; }
.cr-dim { opacity:.45; filter: grayscale(20%) brightness(.92); }
/* inline crowd (popup) - compact sizing */
.popup-card .cr-inline .wx-hrs { padding:4px; }
.popup-card .cr-inline .cr-week { --cr-bar-w:12px; --cr-gap:5px; }
.cr-slots .cr-slot:nth-child(2), .cr-slots .cr-slot:nth-child(3) { margin-left:-2px; }
.popup-card .cr-inline .cr-col { height:28px; }
.popup-card .cr-inline .cr-daywrap { padding:3px 5px; gap:2px; }
.popup-card .cr-inline .cr-slot { font-size:8px; font-weight:300; transform: translateX(-0.5px) scaleX(0.78); transform-origin: left center; }
.popup-card .cr-inline .cr-slots .cr-slot:nth-child(2), .popup-card .cr-inline .cr-slots .cr-slot:nth-child(3) { margin-left:-1px; }
.popup-card .cr-inline .cr-day-top, 
.popup-card .cr-inline .cr-day { font-size:9px; }
/* hide left-side panels entirely */
#weather-panel, #crowd-panel { display: none !important; }

  </style>

  <script>
  // Optional inline crowd text datasource (used if provided)
  window.CROWD_TEXT = `施設名,曜日,～12時,12～15時,15～18時,18時～
ウォータージャンプ S-air,月,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ S-air,火,―,―,―,―

ウォータージャンプ S-air,水,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ S-air,木,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ S-air,金,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ S-air,土,やや混雑,非常に混雑,混雑,やや混雑

ウォータージャンプ S-air,日,やや混雑,非常に混雑,混雑,やや混雑

小布施クエスト,月,―,空いている,やや混雑,やや混雑

小布施クエスト,火,―,空いている,やや混雑,やや混雑

小布施クエスト,水,―,空いている,やや混雑,やや混雑

小布施クエスト,木,―,空いている,やや混雑,やや混雑

小布施クエスト,金,空いている,やや混雑,混雑,やや混雑

小布施クエスト,土,―,混雑,混雑,やや混雑

小布施クエスト,日,やや混雑,非常に混雑,やや混雑,空いている

埼玉クエスト,月,―,空いている,混雑,やや混雑

埼玉クエスト,火,―,空いている,混雑,やや混雑

埼玉クエスト,水,―,空いている,混雑,やや混雑

埼玉クエスト,木,―,空いている,混雑,やや混雑

埼玉クエスト,金,―,空いている,混雑,やや混雑

埼玉クエスト,土,―,混雑,混雑,混雑

埼玉クエスト,日,やや混雑,非常に混雑,混雑,やや混雑

YAMAZEN Aichi Quest,月,―,空いている,やや混雑,やや混雑

YAMAZEN Aichi Quest,火,―,空いている,やや混雑,やや混雑

YAMAZEN Aichi Quest,水,―,空いている,やや混雑,やや混雑

YAMAZEN Aichi Quest,木,―,空いている,やや混雑,やや混雑

YAMAZEN Aichi Quest,金,―,空いている,やや混雑,やや混雑

YAMAZEN Aichi Quest,土,―,混雑,混雑,混雑

YAMAZEN Aichi Quest,日,やや混雑,非常に混雑,混雑,やや混雑

SLAB OUTDOOR PARK TATEYAMA,月,空いている,空いている,やや混雑,―

SLAB OUTDOOR PARK TATEYAMA,火,空いている,空いている,やや混雑,―

SLAB OUTDOOR PARK TATEYAMA,水,空いている,空いている,やや混雑,―

SLAB OUTDOOR PARK TATEYAMA,木,―,―,―,―

SLAB OUTDOOR PARK TATEYAMA,金,空いている,空いている,やや混雑,やや混雑

SLAB OUTDOOR PARK TATEYAMA,土,やや混雑,混雑,混雑,やや混雑

SLAB OUTDOOR PARK TATEYAMA,日,やや混雑,混雑,やや混雑,―

ISLET,月,空いている,空いている,空いている,―

ISLET,火,空いている,空いている,空いている,―

ISLET,水,空いている,空いている,空いている,―

ISLET,木,―,―,―,―

ISLET,金,空いている,空いている,空いている,―

ISLET,土,空いている,やや混雑,やや混雑,―

ISLET,日,やや混雑,やや混雑,空いている,―

Nico Emi Park,月,―,空いている,空いている,空いている

Nico Emi Park,火,―,空いている,空いている,空いている

Nico Emi Park,水,―,空いている,空いている,空いている

Nico Emi Park,木,―,空いている,空いている,空いている

Nico Emi Park,金,―,空いている,空いている,空いている

Nico Emi Park,土,―,空いている,空いている,空いている

Nico Emi Park,日,空いている,空いている,空いている,空いている

白馬さのさかウォータージャンプ,月,―,―,―,―

白馬さのさかウォータージャンプ,火,―,―,―,―

白馬さのさかウォータージャンプ,水,―,―,―,―

白馬さのさかウォータージャンプ,木,―,―,―,―

白馬さのさかウォータージャンプ,金,―,―,―,―

白馬さのさかウォータージャンプ,土,―,―,―,―

白馬さのさかウォータージャンプ,日,―,―,―,―

長野BRUSH?,月,―,空いている,空いている,空いている

長野BRUSH?,火,―,空いている,空いている,空いている

長野BRUSH?,水,―,空いている,空いている,空いている

長野BRUSH?,木,―,空いている,空いている,空いている

長野BRUSH?,金,―,―,―,―

長野BRUSH?,土,―,非常に混雑,混雑,やや混雑

長野BRUSH?,日,―,非常に混雑,混雑,やや混雑

埼玉BRUSH?,月,―,空いている,やや混雑,やや混雑

埼玉BRUSH?,火,―,空いている,やや混雑,やや混雑

埼玉BRUSH?,水,―,空いている,やや混雑,やや混雑

埼玉BRUSH?,木,―,空いている,やや混雑,やや混雑

埼玉BRUSH?,金,―,空いている,やや混雑,混雑

埼玉BRUSH?,土,混雑,混雑,混雑,やや混雑

埼玉BRUSH?,日,混雑,混雑,混雑,やや混雑

湘南BRUSH?,月,―,空いている,空いている,やや混雑

湘南BRUSH?,火,―,空いている,空いている,やや混雑

湘南BRUSH?,水,―,空いている,空いている,やや混雑

湘南BRUSH?,木,―,空いている,空いている,やや混雑

湘南BRUSH?,金,―,空いている,空いている,混雑

湘南BRUSH?,土,混雑,混雑,混雑,やや混雑

湘南BRUSH?,日,混雑,混雑,混雑,やや混雑

千葉さくらBRUSH?,月,―,―,―,―

千葉さくらBRUSH?,火,―,空いている,空いている,空いている

千葉さくらBRUSH?,水,―,空いている,空いている,空いている

千葉さくらBRUSH?,木,―,空いている,空いている,空いている

千葉さくらBRUSH?,金,―,空いている,空いている,空いている

千葉さくらBRUSH?,土,―,やや混雑,やや混雑,空いている

千葉さくらBRUSH?,日,―,やや混雑,やや混雑,空いている

ウォータージャンプ K-air,月,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ K-air,火,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ K-air,水,空いている,空いている,やや混雑,やや混雑

ウォータージャンプ K-air,木,―,―,―,―

ウォータージャンプ K-air,金,空いている,やや混雑,混雑,やや混雑

ウォータージャンプ K-air,土,やや混雑,混雑,混雑,やや混雑

ウォータージャンプ K-air,日,やや混雑,混雑,混雑,空いている

FOUR SNOW TOKAI,月,―,空いている,空いている,空いている

FOUR SNOW TOKAI,火,―,空いている,空いている,空いている

FOUR SNOW TOKAI,水,―,空いている,空いている,空いている

FOUR SNOW TOKAI,木,―,―,―,―

FOUR SNOW TOKAI,金,―,空いている,やや混雑,混雑

FOUR SNOW TOKAI,土,―,混雑,混雑,やや混雑

FOUR SNOW TOKAI,日,やや混雑,混雑,混雑,やや混雑

THE KINGS 千葉,月,―,空いている,やや混雑,やや混雑

THE KINGS 千葉,火,―,空いている,やや混雑,やや混雑

THE KINGS 千葉,水,―,空いている,やや混雑,やや混雑

THE KINGS 千葉,木,―,空いている,やや混雑,やや混雑

THE KINGS 千葉,金,―,空いている,やや混雑,混雑

THE KINGS 千葉,土,―,混雑,混雑,やや混雑

THE KINGS 千葉,日,混雑,混雑,混雑,空いている`;
  // --- Realtime weather panel (Open-Meteo) ---
  (function(){
    if (window.LITE_BOOT) return;
    try {
      var facs = null;
      try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
      if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
      if (!facs || !facs.length) return;

      var panel = document.getElementById('weather-panel');
      var list = document.getElementById('weather-list');
      var nowLbl = document.getElementById('wx-now');
      var toggleBtn = document.getElementById('wx-toggle');
      if (!panel || !list) return;
      panel.style.display = 'block';

      function updateNowLabel(){
        try {
          var now = new Date();
          var y = now.getFullYear();
          var m = now.getMonth()+1;
          var d = now.getDate();
          var w = ['日','月','火','水','木','金','土'][now.getDay()];
          var hh = String(now.getHours()).padStart(2,'0');
          var mm = String(now.getMinutes()).padStart(2,'0');
          if (nowLbl) nowLbl.textContent = y+'/'+m+'/'+d+'（'+w+'） '+hh+':'+mm;
        } catch(e) {}
      }
      updateNowLabel();
      setInterval(updateNowLabel, 60*1000);

      function updateToggleLabel(){
        if (!toggleBtn) return;
        var collapsed = panel.classList.contains('collapsed');
        toggleBtn.textContent = collapsed ? '▼ ひらく' : '▲ 折りたたむ';
      }
      if (toggleBtn) {
        // 初期表示は毎回折りたたみ
        panel.classList.add('collapsed');
        updateToggleLabel();
        toggleBtn.addEventListener('click', function(){
          panel.classList.toggle('collapsed');
          updateToggleLabel();
          try { localStorage.setItem('wxCollapsed', panel.classList.contains('collapsed') ? '1' : '0'); } catch(e) {}
          try {
            // 天気の開閉に応じて混雑ボックスをパネル直下に再配置
            var crowd = document.getElementById('crowd-panel');
            if (crowd) {
              var top = 12;
              if (panel && panel.style.display !== 'none') {
                top = panel.offsetTop + panel.offsetHeight + 12;
              }
              crowd.style.top = top + 'px';
            }
          } catch(e) {}
        });
      }

      var WX = {
        codeTo: function(code){
          code = +code;
          if ([0].includes(code)) return { e:'☀️', t:'快晴' };
          if ([1,2,3].includes(code)) return { e:'⛅', t:'晴れ/くもり' };
          if ([45,48].includes(code)) return { e:'🌫️', t:'霧' };
          if ([51,53,55,56,57].includes(code)) return { e:'🌦️', t:'霧雨' };
          if ([61,63,65,66,67,80,81,82].includes(code)) return { e:'🌧️', t:'雨' };
          if ([71,73,75,77,85,86].includes(code)) return { e:'❄️', t:'雪' };
          if ([95,96,99].includes(code)) return { e:'⛈️', t:'雷雨' };
          return { e:'🛰️', t:'—' };
        }
      };
      try { if (typeof window !== 'undefined') { window.WX = WX; } } catch(e) {}

      async function fetchWx(lat, lon){
        var url = 'https://api.open-meteo.com/v1/forecast?latitude='+lat+'&longitude='+lon+'&hourly=temperature_2m,weather_code&timezone=Asia%2FTokyo';
        const r = await fetch(url, { cache:'no-store' });
        if (!r.ok) throw new Error('wx http '+r.status);
        const j = await r.json();
        var hh = (j && j.hourly) || {};
        return { hours: hh.time || [], temps: hh.temperature_2m || [], codes: hh.weather_code || [] };
      }

      list.innerHTML = facs.map(function(f, i){
        var id = 'wx_'+i;
        // 各施設も毎回デフォルトで折りたたみ
        var isCollapsed = true;
        return '<div class="wx-item '+(isCollapsed?'collapsed':'')+'" id="'+id+'">\
          <div class="wx-head">\
            <button class="wx-f-toggle" type="button" data-i="'+i+'">'+(isCollapsed?'▼':'▲')+'</button>\
            <div class="wx-name">'+(f.name||'')+'</div>\
          </div>\
          <div class="wx-hrs"></div>\
        </div>';
      }).join('');

      var concurrency = 6, inFlight = 0, idx = 0;
      function step(){
        while (inFlight < concurrency && idx < facs.length){
          (function(i){
            inFlight++; idx++;
            var f = facs[i];
            if (typeof f.lat !== 'number' || typeof f.lon !== 'number') { inFlight--; step(); return; }
            fetchWx(f.lat, f.lon).then(function(wx){
              var it = document.getElementById('wx_'+i);
              if (!it) return;
              var hrs = it.querySelector('.wx-hrs');
              var now = new Date();
              var y = now.getFullYear(), m = now.getMonth(), d = now.getDate();
              var start = new Date(y, m, d, 0, 0, 0);
              var end = new Date(y, m, d, 23, 59, 59);
              var hourFloor = new Date(y, m, d, now.getHours(), 0, 0);
              var cells = [];
              for (var k=0;k<wx.hours.length;k++){
                var t = new Date(wx.hours[k]);
                if (t >= hourFloor && t >= start && t <= end) {
                  var m2 = WX.codeTo(wx.codes[k]);
                  var HH = String(t.getHours()).padStart(2,'0');
                  var cls = (m2.e==='☀️'?'wx-sunny': m2.e==='⛅'?'wx-cloudy': m2.e==='🌧️'?'wx-rain': m2.e==='❄️'?'wx-snow': m2.e==='⛈️'?'wx-thunder':'wx-default');
                  cells.push('<div class="wx-cell">\
                    <div class="wx-hour">'+HH+'</div>\
                    <div class="wx-emoji-box '+cls+'">'+m2.e+'</div>\
                    <div class="wx-temp">'+(wx.temps[k]!=null? Math.round(wx.temps[k])+'°C' : '')+'</div>\
                  </div>');
                }
              }
              hrs.innerHTML = cells.join('');
            }).catch(function(){
              var it = document.getElementById('wx_'+i); if (it) it.querySelector('.wx-hrs').innerHTML = '<div class="wx-meta">取得失敗</div>';
            }).finally(function(){ inFlight--; step(); });
          })(idx);
        }
      }
      step();

        list.addEventListener('click', function(ev){
        // Toggle when clicking anywhere in the item (except inside hours strip)
        var item = ev.target.closest('.wx-item');
        if (!item || !list.contains(item)) return;
        if (ev.target.closest('.wx-hrs')) return; // ignore clicks inside the hours area
        var id = item.id || '';
        var i = id.startsWith('wx_') ? id.slice(3) : (item.querySelector('.wx-f-toggle')?.getAttribute('data-i')||'');
        item.classList.toggle('collapsed');
        var btn = item.querySelector('.wx-f-toggle');
        if (btn) btn.textContent = item.classList.contains('collapsed') ? '▼' : '▲';
        try { if (i!=='') localStorage.setItem('wxFCollapsed_'+i, item.classList.contains('collapsed') ? '1' : '0'); } catch(e) {}
          // open → 中の時間帯を現在位置へスクロール
          try { if (!item.classList.contains('collapsed')) { var hrs = item.querySelector('.wx-hrs'); centerNow(hrs, true); } } catch(e) {}
      });

      setInterval(function(){ idx = 0; inFlight = 0; step(); }, 10*60*1000);
    } catch(e) {}
  })();
  </script>
  <script>
  // Inline weather loader for popup cards (reuse same markup as left weather panel)
  (function(){
    // Align all popup label columns: compute max title width and set CSS var on popup
    function alignAllPopupLabelColumns(node){
      try{
        if (!node) return;
        var card = node.querySelector('.popup-card') || node;
        // prevent justification pseudo-element from skewing measurement
        try { card.classList.add('no-justify'); } catch(_){}
        var labels = card.querySelectorAll('.wx-title');
        if (!labels || !labels.length) return;
        // reset any inline widths to measure natural width
        for (var i=0;i<labels.length;i++){ labels[i].style.removeProperty('width'); }
        var maxw = 0;
        for (var j=0;j<labels.length;j++){
          var r = labels[j].getBoundingClientRect();
          if (r && r.width && r.width > maxw) maxw = r.width;
        }
        if (maxw){ card.style.setProperty('--label-w', Math.ceil(maxw) + 'px'); }
        // re-enable justification after layout var is set
        try { setTimeout(function(){ card.classList.remove('no-justify'); }, 0); } catch(_){}
      }catch(e){}
    }
    // Match congestion width to weather width inside the same popup
    function syncPopupInlineWidths(root){
      try{
        if (!root) return;
        var w = root.querySelector('.wx-weather-inline .wx-hrs');
        var c = root.querySelector('.cr-inline .wx-hrs');
        if (!c) return;
        var wRect = w ? w.getBoundingClientRect() : null;
        var wWidth = wRect && wRect.width ? Math.ceil(wRect.width) : 0;
        if (wWidth > 0){
          // Keep congestion content at least as wide as weather, but let container grow to fill
          c.style.minWidth = wWidth + 'px';
          c.style.width = '';
          c.style.maxWidth = '';
        }
      }catch(e){}
    }
    async function fetchWxInline(lat, lon){
      var url = 'https://api.open-meteo.com/v1/forecast?latitude='+lat+'&longitude='+lon+'&hourly=temperature_2m,weather_code&timezone=Asia%2FTokyo';
      var r = await fetch(url, { cache:'no-store' });
      if (!r.ok) throw new Error('wx http '+r.status);
      var j = await r.json();
      var hh = (j && j.hourly) || {};
      return { hours: hh.time || [], temps: hh.temperature_2m || [], codes: hh.weather_code || [] };
    }
    function renderInline(el, wx){
      var now = new Date();
      var y = now.getFullYear(), m = now.getMonth(), d = now.getDate();
      var start = new Date(y, m, d, now.getHours(), 0, 0);
      var startIdx = 0;
      for (var i=0;i<(wx.hours||[]).length;i++){
        if (new Date(wx.hours[i]) >= start) { startIdx = i; break; }
      }
      var cells = [];
      var seen23 = 0;
      for (var k=0; (startIdx + k) < wx.hours.length; k++){
        var t = new Date(wx.hours[startIdx + k]);
        var HH = String(t.getHours()).padStart(2,'0');
        var hourLabel = (k === 0) ? 'Now' : (HH + ':00');
        var m2 = (typeof window !== 'undefined' && window.WX && typeof window.WX.codeTo === 'function')
          ? window.WX.codeTo(wx.codes[startIdx + k])
          : { e:'—', t:'' };
        var cls = (m2.e==='☀️'?'wx-sunny': m2.e==='⛅'?'wx-cloudy': m2.e==='🌧️'?'wx-rain': m2.e==='❄️'?'wx-snow': m2.e==='⛈️'?'wx-thunder':'wx-default');
        var temp = (wx.temps && wx.temps[startIdx + k] != null) ? (Math.round(wx.temps[startIdx + k])+'°') : '';
        cells.push('<div class="wx-cell"><div class="wx-hour">'+hourLabel+'</div><div class="wx-emoji-box '+cls+'">'+m2.e+'</div><div class="wx-temp">'+temp+'</div></div>');
        if (t.getHours() === 23) {
          seen23++;
          if (seen23 >= 2) break; // 2回目の23時で打ち切り
        }
        if (cells.length >= 48) break; // 安全上限
      }
      var body = el.querySelector('.wx-hrs');
      if (body) body.innerHTML = cells.join('');
    }
    async function loadInline(container){
      if (!container || container.dataset.loading || container.dataset.loaded) return;
      container.dataset.loading = '1';
      var lat = parseFloat(container.getAttribute('data-lat'));
      var lon = parseFloat(container.getAttribute('data-lon'));
      if (!isFinite(lat) || !isFinite(lon)) { container.dataset.loading=''; return; }
      try {
        var wx = await fetchWxInline(lat, lon);
        renderInline(container, wx);
      } catch(e) {
        var body = container.querySelector('.wx-hrs');
        if (body) body.innerHTML = '<span style="font-size:12px;color:#6b7280">取得失敗</span>';
      } finally {
        delete container.dataset.loading;
        container.dataset.loaded = '1';
      }
    }
    try { if (typeof window !== 'undefined') window.loadPopupWeatherInline = loadInline; } catch(e) {}
    function onPopupOpen(e){
      try{
        var node = (e && e.popup) ? (typeof e.popup.getElement === 'function' ? e.popup.getElement() : e.popup._contentNode) : null;
        if (!node) return;
        var el = node.querySelector('.wx-weather-inline');
        if (el) { loadInline(el); }
        setTimeout(function(){ alignAllPopupLabelColumns(node); syncPopupInlineWidths(node); }, 0);
        setTimeout(function(){ alignAllPopupLabelColumns(node); syncPopupInlineWidths(node); }, 120);
        setTimeout(function(){ alignAllPopupLabelColumns(node); syncPopupInlineWidths(node); }, 0);
        setTimeout(function(){ alignAllPopupLabelColumns(node); syncPopupInlineWidths(node); }, 120);
        // per-label幅の固定は不要。CSS変数 --label-w のみで揃える
      }catch(_){}
    }
    if (typeof MAP !== 'undefined' && MAP && typeof MAP.on === 'function'){
      MAP.on('popupopen', onPopupOpen);
    }
  })();
  </script>
  <script>
  // Inline crowd loader for popup cards (reuse same chart as left panel)
  (function(){
    function normName(s){
      return String(s||'')
        .toLowerCase()
        .replace(/wj/g,'ウォータージャンプ')
        .replace(/[\s　]+/g,'')
        .replace(/[（）()]/g,'')
        .replace(/[-‐‑–—_.・？?]/g,'') // 各種ハイフン類と疑問符を除去
        .replace(/quest|クエスト/gi,'クエスト')
        .replace(/brush\?/gi,'brush?');
    }
    function isExcludedFacility(name){
      var nk = normName(name);
      // 「ウォータージャンプ K-air」を除外（S-air 等は対象外）
      return nk.includes('ウォータージャンプ') && nk.includes('kair');
    }
    function defaultWeek(){
      var w=[]; for (var d=0; d<7; d++){ var isWeekend=(d===5||d===6); w.push([0, isWeekend?2:1, isWeekend?3:2, isWeekend?3:2]); }
      return w;
    }
    function renderChartInline(container, week){
      if (!week || !container) { container.textContent='—'; return; }
      var days=['月','火','水','木','金','土','日'];
      var slotsLabel=['~12','12-15','15-18','18~'];
      var now=new Date(); var h=now.getHours();
      function slotIndex(hour){ if (hour<12) return 0; if (hour<15) return 1; if (hour<18) return 2; return 3; }
      var curSlot=slotIndex(h);
      var todayIdx=(now.getDay()+6)%7;
      var out=['<div class=\"cr-week\">'];
      for (var d=0; d<7; d++){
        var dayCls=(d===5?' sat':(d===6?' sun':''));
        out.push('<div class=\"cr-daywrap\"><div class=\"cr-day-top'+dayCls+'\">'+days[d]+'</div><div class=\"cr-graph-scale\"><div class=\"cr-col\">');
        var slots=week[d]||[0,0,0,0];
        for (var s=0;s<4;s++){
          var lvl=Math.max(0,Math.min(4,Math.round(slots[s])));
          var dim=(d===todayIdx && s===curSlot)?'':' cr-dim';
          out.push('<div class=\"cr-bar'+dim+' cr-lvl-'+lvl+'\"></div>');
        }
        if (d===todayIdx){
          out.push('<div class=\"cr-now\" style=\"left: calc(('+curSlot+')*(var(--cr-bar-w) + var(--cr-gap)) + (var(--cr-bar-w)/2) - 1px)\"></div>');
        }
        out.push('</div><div class=\"cr-slots\">');
        for (var s2=0;s2<4;s2++){ out.push('<div class=\"cr-slot\">'+slotsLabel[s2]+'</div>'); }
        out.push('</div></div></div>');
      }
      out.push('</div>');
      container.innerHTML=out.join('');
    }
    function chooseWeek(name, map){
      if (!map) return null;
      if (isExcludedFacility(name)) return null;
      // alias: 表示名 -> CSV上の正式名 を優先
      try {
        var ALIAS = (typeof window!=='undefined' && window.CROWD_ALIAS) ? window.CROWD_ALIAS : null;
        if (ALIAS && typeof ALIAS==='object'){
          // 直接キー一致
          if (ALIAS[name] && map[ALIAS[name]]) return map[ALIAS[name]];
          // 正規化して照合
          var an = {}; for (var ak in ALIAS){ if (Object.prototype.hasOwnProperty.call(ALIAS,ak)) an[normName(ak)] = ALIAS[ak]; }
          var key = an[normName(name)];
          if (key && map[key]) return map[key];
        }
      } catch(e){}
      if (map[name]) return map[name];
      var nk=normName(name);
      var dict={};
      for (var k in map){ if (Object.prototype.hasOwnProperty.call(map,k)) dict[normName(k)]=map[k]; }
      if (dict[nk]) return dict[nk];
      for (var k2 in dict){ if (nk.includes(k2) || k2.includes(nk)) return dict[k2]; }
      // fuzzy fallback: pick the key with the longest common substring length (>=3)
      function lcslen(a,b){
        var max=0;
        for (var i=0;i<a.length;i++){
          for (var j=i+1;j<=a.length;j++){
            var sub=a.slice(i,j);
            if (sub.length<=max) continue;
            if (b.indexOf(sub)>=0) max=sub.length;
          }
        }
        return max;
      }
      var bestKey=null, bestScore=0;
      for (var k3 in dict){
        var s = lcslen(nk, k3);
        if (s>bestScore){ bestScore=s; bestKey=k3; }
      }
      if (bestKey && bestScore>=3) return dict[bestKey];
      return null;
   }
   try { if (typeof window !== 'undefined' && typeof window.CROWD_TEXT !== 'undefined') { Object.defineProperty(window, 'CROWD_TEXT', { writable: false, configurable: false }); } } catch(e) {}
   function parseCrowd(){
      try{
        if (window.CROWD_TEXT && typeof window.CROWD_TEXT==='string' && window.CROWD_TEXT.trim().length){
          if (typeof window.parseCrowdCSV==='function') return window.parseCrowdCSV(window.CROWD_TEXT);
        }
      }catch(e){}
      return {};
    }
    function centerNowInline(container, smooth){
      try {
        if (!container) return;
        var nowEl = container.querySelector('.cr-now');
        if (!nowEl) return;
        // Find the parent day-card that contains the dashed line
        var card = nowEl.closest('.cr-daywrap');
        if (!card) return;
        var cb = container.getBoundingClientRect();
        var cardRect = card.getBoundingClientRect();
        // Scroll so that the card is horizontally centred in the container
        var scrollOffset = (cardRect.left - cb.left) + container.scrollLeft;
        var target = Math.max(0, scrollOffset - (container.clientWidth / 2) + (cardRect.width / 2));
        try { container.scrollTo({ left: target, behavior: smooth ? 'smooth' : 'auto' }); }
        catch(e){ container.scrollLeft = target; }
      } catch(e) {}
    }
    function setupCrowdStage(container){
      try {
        var panel = container.closest('[data-panel="crowd"]');
        if (!panel) return;
        var stage = panel.querySelector('.pcard-crowd-stage');
        if (!stage) return;
        var daywraps = container.querySelectorAll('.cr-daywrap');
        if (!daywraps.length) return;
        // Find today's index (card with .cr-now dashed line)
        var todayIdx = -1;
        for (var i = 0; i < daywraps.length; i++) {
          if (daywraps[i].querySelector('.cr-now')) { todayIdx = i; break; }
        }
        if (todayIdx < 0) todayIdx = 2; // fallback: Wednesday
        function showDay(idx) {
          stage.innerHTML = '';
          var src = daywraps[idx];
          if (!src) return;
          var gs = src.querySelector('.cr-graph-scale');
          if (!gs) return;
          stage.appendChild(gs.cloneNode(true));
        }
        // Wire day-selector buttons (onclick to avoid duplicates on re-render)
        var btns = panel.querySelectorAll('.pcard-crowd-day');
        for (var j = 0; j < btns.length; j++) {
          (function(btn){
            btn.onclick = function(e) {
              e.stopPropagation();
              var idx = parseInt(btn.getAttribute('data-day'));
              for (var k = 0; k < btns.length; k++) btns[k].classList.remove('active');
              btn.classList.add('active');
              showDay(idx);
            };
          })(btns[j]);
        }
        // Set initial active button and show today's graph
        for (var m = 0; m < btns.length; m++) {
          btns[m].classList.toggle('active', m === todayIdx);
        }
        showDay(todayIdx);
      } catch(e) {}
    }
    function loadInline(container){
      try{
        var name = container.getAttribute('data-fname') || '';
        var body = container.querySelector('.wx-hrs');
        var data = parseCrowd();
        var week = chooseWeek(name, data) || defaultWeek();
        renderChartInline(body, week);
        // Set up single-day stage view with day selector
        setupCrowdStage(container);
      }catch(e){
        try { container.querySelector('.wx-hrs').textContent='—'; } catch(_) {}
      }
    }
    try { if (typeof window!=='undefined') window.loadPopupCrowdInline = loadInline; } catch(e) {}
    function onPopupOpen(e){
      try{
        var node = (e && e.popup) ? (typeof e.popup.getElement === 'function' ? e.popup.getElement() : e.popup._contentNode) : null;
        if (!node) return;
        var el = node.querySelector('.cr-inline');
        if (el) { loadInline(el); }
        try{
          var labels = node.querySelectorAll('.popup-card .wx-title');
          if (labels && labels.length){
            var maxw = 0;
            for (var i=0;i<labels.length;i++){
              var rw = labels[i].getBoundingClientRect();
              if (rw && rw.width && rw.width > maxw) maxw = rw.width;
            }
            if (maxw){
              maxw = Math.ceil(maxw);
              for (var j=0;j<labels.length;j++){
                labels[j].style.display = 'inline-block';
                labels[j].style.width = maxw + 'px';
              }
            }
          }
        }catch(_){}
      }catch(_){}
    }
    if (typeof MAP!=='undefined' && MAP && typeof MAP.on==='function'){
      MAP.on('popupopen', onPopupOpen);
    }
  })();
  </script>
  <script>
  // --- Popup Card Tab Switching + Weather/Crowd loading on tab click ---
  (function(){
    function initCardTabs(node){
      if (!node) return;
      var card = node.querySelector('.pcard');
      if (!card) return;
      var tabs = card.querySelectorAll('.pcard-tab');
      var panels = card.querySelectorAll('.pcard-panel');
      tabs.forEach(function(tab){
        tab.addEventListener('click', function(e){
          e.stopPropagation();
          var target = tab.getAttribute('data-tab');
          tabs.forEach(function(t){ t.classList.remove('active'); });
          panels.forEach(function(p){ p.classList.remove('active'); });
          tab.classList.add('active');
          var targetPanel = card.querySelector('.pcard-panel[data-panel="'+target+'"]');
          if (targetPanel) targetPanel.classList.add('active');
          // Lazy-load weather when tab is clicked
          if (target === 'weather'){
            var wxEl = card.querySelector('.wx-weather-inline');
            if (wxEl && window.loadPopupWeatherInline) window.loadPopupWeatherInline(wxEl);
          }
          // Lazy-load crowd when tab is clicked
          if (target === 'crowd'){
            var crEl = card.querySelector('.cr-inline');
            if (crEl && window.loadPopupCrowdInline) window.loadPopupCrowdInline(crEl);
          }
        });
      });
      // Weather strip arrow scroll buttons
      var wxStrip = card.querySelector('.pcard-wx-strip');
      var prevBtn = card.querySelector('.pcard-wx-prev');
      var nextBtn = card.querySelector('.pcard-wx-next');
      if (wxStrip && prevBtn) prevBtn.addEventListener('click', function(e){ e.stopPropagation(); wxStrip.scrollBy({ left: -140, behavior: 'smooth' }); });
      if (wxStrip && nextBtn) nextBtn.addEventListener('click', function(e){ e.stopPropagation(); wxStrip.scrollBy({ left: 140, behavior: 'smooth' }); });
      // Also handle rental toggle inside new card
      var rentalBtn = card.querySelector('.rental-toggle');
      var rentalBox = card.querySelector('.pcard-rental-box');
      if (rentalBtn && rentalBox) {
        rentalBtn.addEventListener('click', function(e){
          e.stopPropagation();
          var expanded = rentalBtn.getAttribute('aria-expanded') === 'true';
          rentalBtn.setAttribute('aria-expanded', expanded ? 'false' : 'true');
          rentalBox.style.display = expanded ? 'none' : 'block';
          if (!expanded && rentalBox.innerHTML === '読み込み中...') {
            // Try to load rentals
            try {
              var fname = card.getAttribute('data-fname') || '';
              var facsList = (typeof facs !== 'undefined' && Array.isArray(facs)) ? facs : (Array.isArray(window.facilities) ? window.facilities : []);
              var fac = facsList.find(function(f){ return f && f.name === fname; });
              if (fac && typeof window.getRentals === 'function') {
                var r = window.getRentals(fac);
                if (r && r.length > 0) {
                  rentalBox.innerHTML = '<div class="rental-icons">' + r.map(function(item){
                    if (typeof item === 'string') return '<div class="ri"><span style="font-size:11px">'+item+'</span></div>';
                    if (item && item.icon) return '<div class="ri"><img src="'+item.icon+'" alt="'+(item.name||'')+'" title="'+(item.name||'')+'"><div class="ri-cap">'+(item.name||'')+'</div></div>';
                    return '';
                  }).join('') + '</div>';
                } else {
                  rentalBox.innerHTML = '<span class="rental-empty">レンタル情報なし</span>';
                }
              } else {
                rentalBox.innerHTML = '<span class="rental-empty">レンタル情報なし</span>';
              }
            } catch(e) { rentalBox.innerHTML = '<span class="rental-empty">—</span>'; }
          }
        });
      }
    }
    if (typeof MAP !== 'undefined' && MAP && typeof MAP.on === 'function'){
      MAP.on('popupopen', function(e){
        try {
          var node = (e && e.popup) ? (typeof e.popup.getElement === 'function' ? e.popup.getElement() : e.popup._contentNode) : null;
          initCardTabs(node);
          // Auto-load weather for first tab if visible
          if (node) {
            var wxEl = node.querySelector('.wx-weather-inline');
            if (wxEl && window.loadPopupWeatherInline) {
              setTimeout(function(){ window.loadPopupWeatherInline(wxEl); }, 100);
            }
          }
        } catch(e){}
        // Hide brand logo while popup is open (avoids z-index overlap)
        try { var bl = document.getElementById('brand-logo'); if (bl) bl.classList.add('popup-open'); } catch(_){}
      });
      MAP.on('popupclose', function(){
        try { var bl = document.getElementById('brand-logo'); if (bl) bl.classList.remove('popup-open'); } catch(_){}
      });
    }
  })();
  </script>
  <script>
  // --- Crowd (congestion) panel (UI only; data TBD) ---
  (function(){
    if (window.LITE_BOOT) return;
    try {
      var crowd = document.getElementById('crowd-panel');
      var toggle = document.getElementById('crowd-toggle');
      var weather = document.getElementById('weather-panel');
      var list = document.getElementById('crowd-list');
      if (!crowd) return;
      crowd.style.display = 'block';
      function place(){
        try {
          var top = 12;
          if (weather && weather.style.display !== 'none') {
            top = weather.offsetTop + weather.offsetHeight + 12;
          }
          crowd.style.top = top + 'px';
        } catch(e) {}
      }
      place();
      window.addEventListener('resize', place);
      // facilities wait helper
      function obtainFacilities(){
        var arr = null;
        try { if (Array.isArray(window.facilities)) arr = window.facilities; } catch(e) {}
        if (!arr) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) arr = facilities; } catch(e) {} }
        return Array.isArray(arr) ? arr : [];
      }
      function waitFacilities(cb){
        var t0 = Date.now();
        (function tick(){
          var a = obtainFacilities();
          if (a.length) { cb(a); return; }
          if (Date.now() - t0 > 15000) { cb(a); return; }
          setTimeout(tick, 200);
        })();
      }

      // ユーザー指定: CSVは使わず、以下のテキストだけを使用
      if (!window.CROWD_TEXT) window.CROWD_TEXT = `施設名,曜日,～12時,12～15時,15～18時,18時～
ウォータージャンプ S-air,月,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ S-air,火,―,―,―,―
ウォータージャンプ S-air,水,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ S-air,木,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ S-air,金,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ S-air,土,やや混雑,非常に混雑,混雑,やや混雑
ウォータージャンプ S-air,日,やや混雑,非常に混雑,混雑,やや混雑
小布施クエスト,月,―,空いている,やや混雑,やや混雑
小布施クエスト,火,―,空いている,やや混雑,やや混雑
小布施クエスト,水,―,空いている,やや混雑,やや混雑
小布施クエスト,木,―,―,―,―
小布施クエスト,金,空いている,やや混雑,混雑,やや混雑
小布施クエスト,土,―,混雑,混雑,やや混雑
小布施クエスト,日,やや混雑,非常に混雑,やや混雑,空いている
埼玉クエスト,月,―,空いている,混雑,やや混雑
埼玉クエスト,火,―,空いている,混雑,やや混雑
埼玉クエスト,水,―,空いている,混雑,やや混雑
埼玉クエスト,木,―,空いている,混雑,やや混雑
埼玉クエスト,金,―,空いている,混雑,やや混雑
埼玉クエスト,土,―,混雑,混雑,混雑
埼玉クエスト,日,やや混雑,非常に混雑,混雑,やや混雑
YAMAZEN Aichi Quest,月,―,空いている,やや混雑,やや混雑
YAMAZEN Aichi Quest,火,―,空いている,やや混雑,やや混雑
YAMAZEN Aichi Quest,水,―,空いている,やや混雑,やや混雑
YAMAZEN Aichi Quest,木,―,空いている,やや混雑,やや混雑
YAMAZEN Aichi Quest,金,―,空いている,やや混雑,やや混雑
YAMAZEN Aichi Quest,土,―,混雑,混雑,混雑
YAMAZEN Aichi Quest,日,やや混雑,非常に混雑,混雑,やや混雑
SLAB OUTDOOR PARK TATEYAMA,月,空いている,空いている,やや混雑,―
SLAB OUTDOOR PARK TATEYAMA,火,空いている,空いている,やや混雑,―
SLAB OUTDOOR PARK TATEYAMA,水,空いている,空いている,やや混雑,―
SLAB OUTDOOR PARK TATEYAMA,木,―,―,―,―
SLAB OUTDOOR PARK TATEYAMA,金,空いている,空いている,やや混雑,やや混雑
SLAB OUTDOOR PARK TATEYAMA,土,やや混雑,混雑,混雑,やや混雑
SLAB OUTDOOR PARK TATEYAMA,日,やや混雑,混雑,やや混雑,―
ISLET,月,空いている,空いている,空いている,―
ISLET,火,空いている,空いている,空いている,―
ISLET,水,空いている,空いている,空いている,―
ISLET,木,―,―,―,―
ISLET,金,空いている,空いている,空いている,―
ISLET,土,空いている,やや混雑,やや混雑,―
ISLET,日,やや混雑,やや混雑,空いている,―
Nico Emi Park,月,―,空いている,空いている,空いている
Nico Emi Park,火,―,空いている,空いている,空いている
Nico Emi Park,水,―,空いている,空いている,空いている
Nico Emi Park,木,―,空いている,空いている,空いている
Nico Emi Park,金,―,空いている,空いている,空いている
Nico Emi Park,土,―,空いている,空いている,空いている
Nico Emi Park,日,空いている,空いている,空いている,空いている
白馬さのさかウォータージャンプ,月,空いている,空いている,―,―
白馬さのさかウォータージャンプ,火,空いている,空いている,―,―
白馬さのさかウォータージャンプ,水,空いている,空いている,―,―
白馬さのさかウォータージャンプ,木,空いている,空いている,―,―
白馬さのさかウォータージャンプ,金,空いている,空いている,―,―
白馬さのさかウォータージャンプ,土,やや混雑,非常に混雑,やや混雑,―
白馬さのさかウォータージャンプ,日,やや混雑,非常に混雑,やや混雑,―
長野BRUSH?,月,―,空いている,空いている,空いている
長野BRUSH?,火,―,空いている,空いている,空いている
長野BRUSH?,水,―,空いている,空いている,空いている
長野BRUSH?,木,―,空いている,空いている,空いている
長野BRUSH?,金,―,―,―,―
長野BRUSH?,土,―,非常に混雑,混雑,やや混雑
長野BRUSH?,日,―,非常に混雑,混雑,やや混雑
埼玉BRUSH?,月,―,空いている,やや混雑,やや混雑
埼玉BRUSH?,火,―,空いている,やや混雑,やや混雑
埼玉BRUSH?,水,―,空いている,やや混雑,やや混雑
埼玉BRUSH?,木,―,空いている,やや混雑,やや混雑
埼玉BRUSH?,金,―,空いている,やや混雑,混雑
埼玉BRUSH?,土,混雑,混雑,混雑,やや混雑
埼玉BRUSH?,日,混雑,混雑,混雑,やや混雑
湘南BRUSH?,月,―,空いている,空いている,やや混雑
湘南BRUSH?,火,―,空いている,空いている,やや混雑
湘南BRUSH?,水,―,空いている,空いている,やや混雑
湘南BRUSH?,木,―,―,―,―
湘南BRUSH?,金,―,空いている,空いている,混雑
湘南BRUSH?,土,混雑,混雑,混雑,やや混雑
湘南BRUSH?,日,混雑,混雑,混雑,やや混雑
千葉さくらBRUSH?,月,―,―,―,―
千葉さくらBRUSH?,火,―,空いている,空いている,空いている
千葉さくらBRUSH?,水,―,空いている,空いている,空いている
千葉さくらBRUSH?,木,―,空いている,空いている,空いている
千葉さくらBRUSH?,金,―,空いている,空いている,空いている
千葉さくらBRUSH?,土,―,やや混雑,やや混雑,空いている
千葉さくらBRUSH?,日,―,やや混雑,やや混雑,空いている
ウォータージャンプ K-air,月,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ K-air,火,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ K-air,水,空いている,空いている,やや混雑,やや混雑
ウォータージャンプ K-air,木,―,―,―,―
ウォータージャンプ K-air,金,空いている,やや混雑,混雑,やや混雑
ウォータージャンプ K-air,土,やや混雑,混雑,混雑,やや混雑
ウォータージャンプ K-air,日,やや混雑,混雑,混雑,空いている
FOUR SNOW TOKAI,月,―,空いている,空いている,空いている
FOUR SNOW TOKAI,火,―,空いている,空いている,空いている
FOUR SNOW TOKAI,水,―,空いている,空いている,空いている
FOUR SNOW TOKAI,木,―,―,―,―
FOUR SNOW TOKAI,金,―,空いている,やや混雑,混雑
FOUR SNOW TOKAI,土,―,混雑,混雑,やや混雑
FOUR SNOW TOKAI,日,やや混雑,混雑,混雑,やや混雑
THE KINGS 千葉,月,―,空いている,やや混雑,やや混雑
THE KINGS 千葉,火,―,空いている,やや混雑,やや混雑
THE KINGS 千葉,水,―,空いている,やや混雑,やや混雑
THE KINGS 千葉,木,―,―,―,―
THE KINGS 千葉,金,―,空いている,やや混雑,混雑
THE KINGS 千葉,土,―,混雑,混雑,やや混雑
THE KINGS 千葉,日,混雑,混雑,混雑,空いている`;

      var facList = [];
      function namesFromCrowdText(){
        try {
          if (typeof parseCrowdCSV === 'function' && window.CROWD_TEXT && window.CROWD_TEXT.trim().length){
            var m = parseCrowdCSV(window.CROWD_TEXT);
            return Object.keys(m||{}).map(function(k){ return { name: k }; });
          }
        } catch(e) {}
        return [];
      }
      function buildCrowdUI(facs){
        if (!list) return;
        facList = Array.isArray(facs) && facs.length ? facs : namesFromCrowdText();
        if (!Array.isArray(facList) || facList.length===0){
          list.innerHTML = '<div class="wx-item">データ準備中…</div>';
          return;
        }
        list.innerHTML = facList.map(function(f, i){
          // 各施設も毎回デフォルトで折りたたみ
          var isCollapsed = true;
          return '<div class="wx-item '+(isCollapsed?'collapsed':'')+'" id="crowd_'+i+'">\
            <div class="wx-head">\
              <button class="wx-f-toggle" type="button" data-i="'+i+'">'+(isCollapsed?'▼':'▲')+'</button>\
              <div class="wx-name">'+(f.name||'')+'</div>\
            </div>\
            <div class="wx-hrs">—</div>\
          </div>';
        }).join('');
        list.addEventListener('click', function(ev){
          var item = ev.target.closest('.wx-item');
          if (!item || !list.contains(item)) return;
          if (ev.target.closest('.wx-hrs')) return;
          var id = item.id || '';
          var i = id.startsWith('crowd_') ? id.slice(6) : (item.querySelector('.wx-f-toggle')?.getAttribute('data-i')||'');
          item.classList.toggle('collapsed');
          var btn = item.querySelector('.wx-f-toggle');
          if (btn) btn.textContent = item.classList.contains('collapsed') ? '▼' : '▲';
          try { if (i!=='') localStorage.setItem('crowdFCollapsed_'+i, item.classList.contains('collapsed') ? '1' : '0'); } catch(e) {}
          try { if (!item.classList.contains('collapsed')) { var hrs = item.querySelector('.wx-hrs'); centerNow(hrs, true); } } catch(e) {}
        });
        // 予描画: デフォルトで棒を表示（fetch完了後に上書き）
        Array.from(list.querySelectorAll('.wx-item .wx-hrs')).forEach(function(body){
          renderChart(body, defaultWeek());
        });
        // after UI built, load data and render
        fetchCrowd().then(function(data){
          var hasData = data && Object.keys(data).length>0;
          var defMap = hasData ? {} : generateDefaultCrowd(facList);
          Array.from(list.querySelectorAll('.wx-item')).forEach(function(it, idx){
            var name = it.querySelector('.wx-name')?.textContent || '';
            var week = (hasData ? bestWeekForName(name, data) : null) || defMap[name] || defaultWeek();
            var body = it.querySelector('.wx-hrs');
            renderChart(body, week);
          });
        });
      }

      // wait for facilities to be available
      waitFacilities(function(facs){ buildCrowdUI(facs); });
      // load crowd.csv and render charts
      function generateDefaultCrowd(facs){
        var map = {};
        var names = Array.isArray(facs) ? facs.map(function(x){ return x && x.name ? x.name : ''; }) : [];
        names.forEach(function(name){
          if (!name) return;
          var week = [];
          for (var d=0; d<7; d++){
            var isWeekend = (d===5 || d===6);
            var slots = [0,0,0,0]; // ~12,12-15,15-18,18-
            // 平日: 12-15:1, 15-18:2, 18-:2
            // 週末: 12-15:2, 15-18:3, 18-:3
            slots[1] = isWeekend ? 2 : 1;
            slots[2] = isWeekend ? 3 : 2;
            slots[3] = isWeekend ? 3 : 2;
            week.push(slots);
          }
          map[name] = week;
        });
        return map;
      }

      async function fetchCrowd(){
        try {
          var parsed = null;
          // 1) Inline pasted data ONLY (CSVは使用しない)
          if (window.CROWD_TEXT && typeof window.CROWD_TEXT === 'string' && window.CROWD_TEXT.trim().length>0){
            parsed = parseCrowdCSV(window.CROWD_TEXT);
          }
          // Final fallback: try simple parser strictly for long form
          if ((!parsed || !Object.keys(parsed).length) && window.CROWD_TEXT && window.CROWD_TEXT.trim().length>0){
            parsed = (function(text){
              var lines = String(text||'').split(/\r?\n/).filter(function(l){ return l.trim().length>0; });
              if (lines.length <= 1) return {};
              var map = {}; var dayIdx = { '月':0,'火':1,'水':2,'木':3,'金':4,'土':5,'日':6 };
              function lvl(s){
                s = String(s||'').trim();
                if (!s || /^(?:×|—|―|ー|－|-)$/.test(s)) return 0; // 記号は0
                var n = parseFloat(s);
                if (isFinite(n)) return Math.max(0, Math.min(4, n));
                if (/非常に/.test(s)) return 4;
                if (/やや/.test(s)) return 2;
                if (/混雑/.test(s) && !/非常に/.test(s) && !/やや/.test(s)) return 3;
                if (/空いている|空|余裕/.test(s)) return 1;
                return 0;
              }
              for (var i=1;i<lines.length;i++){ var cols=lines[i].split(','); if(cols.length<6) continue; var name=String(cols[0]||'').trim(); var d=dayIdx[String(cols[1]||'').trim()]; if(!name||!(d>=0)) continue; if(!map[name]){ map[name]=[]; for(var k=0;k<7;k++){ map[name][k]=[0,0,0,0]; } } map[name][d][0]=lvl(cols[2]); map[name][d][1]=lvl(cols[3]); map[name][d][2]=lvl(cols[4]); map[name][d][3]=lvl(cols[5]); }
              return map;
            })(window.CROWD_TEXT);
          }
          if (!parsed || !Object.keys(parsed).length) return {};
          return parsed;
        } catch(e) { return {}; }
      }
      // local CSV splitter (comma, with quotes)
      function splitCSV(line){
        var out = []; var cur = ''; var q = false;
        for (var i=0;i<line.length;i++){
          var c = line[i];
          if (q){
            if (c==='"' && line[i+1]==='"'){ cur+='"'; i++; }
            else if (c==='"'){ q=false; }
            else { cur+=c; }
          } else {
            if (c==='"'){ q=true; }
            else if (c===','){ out.push(cur); cur=''; }
            else { cur+=c; }
          }
        }
        out.push(cur);
        return out;
      }
      function parseCrowdCSV(text){
        var bom = /^(?:\uFEFF|ï»¿)/;
        text = String(text||'').replace(/，/g, ',');
        var lines = text.split(/\r?\n/).filter(function(l){ return l.trim().length>0; });
        if (!lines.length) return {};
        function splitFlex(line){
          if (/\t/.test(line) && (line.split('\t').length > line.split(',').length)) return line.split('\t');
          return splitCSV(line);
        }
        // ヘッダ行が「施設名,曜日,～12時,12～15時,15～18時,18時～」のような既知の固定文言かチェック
        var firstCols = splitFlex(lines[0]).map(function(h){ return String(h).replace(bom,'').trim(); });
        var known = firstCols.length>=6 && /施設/.test(firstCols[0]) && /曜/.test(firstCols[1]);
        // 先頭行がヘッダでない（いきなりデータ行）場合は固定ヘッダを仮置き
        var header = known ? firstCols : ['施設名','曜日','～12時','12～15時','15～18時','18時～'];
        if (!known) {
          lines.unshift(header.join(','));
        }
        // detect columns for long form
        var nameIdx = header.findIndex(function(h){ return /(施設|施設名|name)/i.test(h); });
        if (nameIdx < 0) nameIdx = 0;
        var dayIdx = header.findIndex(function(h){ return /(曜日|day)/i.test(h); });
        var slotCols = [
          header.findIndex(function(h){ return /(～?\s*12時|~?\s*12)/.test(h); }),
          header.findIndex(function(h){ return /(12\s*[–~〜－-]\s*15|12.*15)/.test(h); }),
          header.findIndex(function(h){ return /(15\s*[–~〜－-]\s*18|15.*18)/.test(h); }),
          header.findIndex(function(h){ return /(18時?[～~]|18\s*以降|18\s*$|夜)/.test(h); })
        ];
        var looksLong = (dayIdx >= 0 && slotCols.every(function(x){ return x >= 0; }));
        // Fallback: if '曜日' 列はあるのに区分見出しが判定できない場合、曜日の次の4列を使用
        if (dayIdx >= 0 && !looksLong && header.length >= dayIdx + 5){
          slotCols = [dayIdx+1, dayIdx+2, dayIdx+3, dayIdx+4];
          looksLong = true;
        }
        function parseLevel(v){
          if (v==null) return 0;
          var s = String(v).trim(); if (s==='') return 0;
          // 記号系（ダッシュ/×）は0
          if (/^(?:×|—|―|ー|－|-)$/.test(s)) return 0;
          // 明示数値は0-4でクリップ
          var n = parseFloat(s.replace('%',''));
          if (isFinite(n)) return Math.max(0, Math.min(4, n));
          if (/非常に|大|◎/i.test(s)) return 4;
          // 「やや混雑」は2、「混雑」は3（非常に/ややを除外）
          if (/やや/.test(s)) return 2;
          if (/混雑|ピーク|繁忙/i.test(s) && !/非常に/.test(s) && !/やや/.test(s)) return 3;
          if (/空いている|空|余裕/i.test(s)) return 1; // 「空いている」は1
          return 0;
        }
        function dayToIdx(s){
          if (/月/.test(s)) return 0; if (/火/.test(s)) return 1; if (/水/.test(s)) return 2; if (/木/.test(s)) return 3; if (/金/.test(s)) return 4; if (/土/.test(s)) return 5; if (/日/.test(s)) return 6;
          if (/mon/i.test(s)) return 0; if (/tue/i.test(s)) return 1; if (/wed/i.test(s)) return 2; if (/thu/i.test(s)) return 3; if (/fri/i.test(s)) return 4; if (/sat/i.test(s)) return 5; if (/sun/i.test(s)) return 6;
          return -1;
        }
        var map = {};
        if (looksLong){
          for (var i=1;i<lines.length;i++){
            var cols = splitFlex(lines[i]).map(function(c){ return String(c).replace(bom,'').trim(); });
            if (!cols.length) continue;
            var name = cols[nameIdx] || '';
            var dIdx = dayToIdx(cols[dayIdx]||'');
            if (!name || dIdx<0) continue;
            if (!map[name]){ map[name] = []; for (var d=0; d<7; d++){ map[name][d] = [0,0,0,0]; } }
            for (var s=0; s<4; s++){
              var v = cols[slotCols[s]];
              map[name][dIdx][s] = parseLevel(v);
            }
          }
          return map;
        }
        // wide form fallback
        var colMap = {};
        function detectDay(h){
          var s = h.toLowerCase();
          if (/月/.test(h)||/mon/.test(s)) return 0; if (/火/.test(h)||/tue/.test(s)) return 1; if (/水/.test(h)||/wed/.test(s)) return 2; if (/木/.test(h)||/thu/.test(s)) return 3; if (/金/.test(h)||/fri/.test(s)) return 4; if (/土/.test(h)||/sat/.test(s)) return 5; if (/日/.test(h)||/sun/.test(s)) return 6; return -1;
        }
        function detectSlot(h){
          var s = h.toLowerCase();
          if (/(~|〜)?\s*12/.test(s) && !/15|18/.test(s)) return 0;
          if (/(12)\D+(15)/.test(s)) return 1;
          if (/(15)\D+(18)/.test(s)) return 2;
          if (/(18)/.test(s)) return 3;
          var m = s.match(/_(\d)\b/); if (m) return Math.max(0, Math.min(3, parseInt(m[1],10)));
          return -1;
        }
        for (var c=0;c<header.length;c++){
          if (c===nameIdx) continue;
          var h = header[c];
          var d = detectDay(h); var slot = detectSlot(h);
          if (d>=0 && slot>=0) colMap[c] = { d:d, s:slot };
        }
        if (Object.keys(colMap).length === 0 && header.length >= (nameIdx+1+28)){
          var idx = nameIdx + 1;
          for (var d=0; d<7; d++){
            for (var s=0; s<4; s++){
              colMap[idx] = { d:d, s:s };
              idx++;
            }
          }
        }
        for (var i=1;i<lines.length;i++){
          var cols = splitFlex(lines[i]).map(function(c){ return String(c).replace(bom,'').trim(); });
          if (!cols.length) continue;
          var name = cols[nameIdx] || '';
          if (!name) continue;
          var week = []; for (var d=0; d<7; d++){ week[d] = [0,0,0,0]; }
          for (var c=0;c<cols.length;c++){
            if (!colMap[c]) continue;
            var ds = colMap[c];
            week[ds.d][ds.s] = parseLevel(cols[c]);
          }
          map[name] = week;
        }
        return map;
      }
      // expose for console diagnostics
      try { window.parseCrowdCSV = parseCrowdCSV; } catch(e) {}
      function bestWeekForName(name, data){
        // exclude: ウォータージャンプ K-air は割り当て対象外
        function isExcludedLocalName(nm){
          var t = normLocal(nm);
          return t.includes('ウォータージャンプ') && t.includes('kair');
        }
        if (!data) return null;
        // alias: 表示名 -> CSV上の正式名 を優先
        try {
          var ALIAS = (typeof window!=='undefined' && window.CROWD_ALIAS) ? window.CROWD_ALIAS : null;
          if (ALIAS && typeof ALIAS==='object'){
            if (ALIAS[name] && data[ALIAS[name]]) return data[ALIAS[name]];
            var an = {}; for (var ak in ALIAS){ if (Object.prototype.hasOwnProperty.call(ALIAS,ak)) an[normLocal(ak)] = ALIAS[ak]; }
            var key = an[normLocal(name)];
            if (key && data[key]) return data[key];
          }
        } catch(e){}
        if (data[name]) return data[name];
        // local normalizer (独立して動作)
        function normLocal(s){
          return String(s||'')
            .toLowerCase()
            .replace(/wj/g,'ウォータージャンプ')
            .replace(/[\s　]+/g,'')
            .replace(/[（）()]/g,'')
            .replace(/[-‐‑–—_.・？?]/g,'') // 各種ハイフン類と疑問符を除去
            .replace(/quest|クエスト/gi,'クエスト')
            .replace(/brush\?/gi,'brush?');
        }
        if (isExcludedLocalName(name)) return null;
        var nk = normLocal(name);
        // build normalized dict once
        var dict = {};
        for (var k in data){ if (Object.prototype.hasOwnProperty.call(data,k)) { dict[normLocal(k)] = data[k]; } }
        if (dict[nk]) return dict[nk];
        // contains match
        for (var k in dict){ if (nk.includes(k) || k.includes(nk)) return dict[k]; }
        // fuzzy fallback (同様に最長共通部分列長っぽいスコアで推定)
        function lcslen(a,b){
          var max=0;
          for (var i=0;i<a.length;i++){
            for (var j=i+1;j<=a.length;j++){
              var sub=a.slice(i,j);
              if (sub.length<=max) continue;
              if (b.indexOf(sub)>=0) max=sub.length;
            }
          }
          return max;
        }
        var bestKey=null, bestScore=0;
        for (var k2 in dict){
          var s = lcslen(nk, k2);
          if (s>bestScore){ bestScore=s; bestKey=k2; }
        }
        if (bestKey && bestScore>=3) return dict[bestKey];
        return null;
      }
      function defaultWeek(){
        var w=[]; for (var d=0; d<7; d++){ var isWeekend=(d===5||d===6); w.push([0, isWeekend?2:1, isWeekend?3:2, isWeekend?3:2]); }
        return w;
      }
      function renderChart(container, week){
        if (!week || !container) { container.textContent='—'; return; }
        var days = ['月','火','水','木','金','土','日'];
        var slotsLabel = ['~12','12-15','15-18','18~'];
        var now = new Date();
        var h = now.getHours();
        function slotIndex(hour){ if (hour < 12) return 0; if (hour < 15) return 1; if (hour < 18) return 2; return 3; }
        var curSlot = slotIndex(h);
        // JSのgetDay()は日曜=0。配列daysは月曜=0のため補正
        var todayIdx = (now.getDay() + 6) % 7;
        // ヘッダ（曜日）
        var head = ['<div class="cr-week">'];
        for (var d=0; d<7; d++){
          var dayCls = (d===5?' sat':(d===6?' sun':''));
          head.push('<div class="cr-daywrap"><div class="cr-day-top'+dayCls+'">'+days[d]+'</div><div class="cr-graph-scale"><div class="cr-col">');
          var slots = week[d] || [0,0,0,0];
          // 現在時刻の縦点線（当日分のみ）
          for (var s=0; s<4; s++){
            var lvl = Math.max(0, Math.min(4, Math.round(slots[s])));
            var dim = (d===todayIdx && s===curSlot) ? '' : ' cr-dim';
            head.push('<div class="cr-bar'+dim+' cr-lvl-'+lvl+'"></div>');
          }
          // after bars, overlay now marker if today (place at bar center)
          if (d === todayIdx){
            head.push('<div class="cr-now" style="left: calc(('+curSlot+')*(var(--cr-bar-w) + var(--cr-gap)) + (var(--cr-bar-w)/2) - 1px)"></div>');
          }
          head.push('</div><div class="cr-slots">');
          for (var s2=0; s2<4; s2++){
            head.push('<div class="cr-slot">'+slotsLabel[s2]+'</div>');
          }
          head.push('</div></div></div>');
        }
        head.push('</div>');
        container.innerHTML = head.join('');
      }
      function centerNow(container, smooth){
        try {
          if (!container) return;
          var nowEl = container.querySelector('.cr-now');
          if (!nowEl) return;
          var cb = container.getBoundingClientRect();
          var nb = nowEl.getBoundingClientRect();
          var left = nb.left - cb.left + container.scrollLeft;
          var target = Math.max(0, left - container.clientWidth/2);
          try { container.scrollTo({ left: target, behavior: smooth ? 'smooth' : 'auto' }); }
          catch(e){ container.scrollLeft = target; }
        } catch(e) {}
      }
      // data rendering now happens inside buildCrowdUI after facilities ready
      if (toggle) {
        // 初期表示は毎回折りたたみ
        crowd.classList.add('collapsed');
        toggle.addEventListener('click', function(){
          crowd.classList.toggle('collapsed');
          toggle.textContent = crowd.classList.contains('collapsed') ? '▼ ひらく' : '▲ 折りたたむ';
          try { localStorage.setItem('crowdCollapsed', crowd.classList.contains('collapsed') ? '1' : '0'); } catch(e) {}
          place();
        });
        // set initial label
        toggle.textContent = crowd.classList.contains('collapsed') ? '▼ ひらく' : '▲ 折りたたむ';
      }
    } catch(e) {}
  })();
  </script>
  <script>
  // rental toggle controller
  window.toggleRentalBox = function(btn){
    try {
      // guard against double-fire from multiple input events
      var now = Date.now();
      var last = Number(btn && btn.getAttribute && btn.getAttribute('data-last-toggle') || 0);
      if (now - last < 160) { return; }
      if (btn && btn.setAttribute) btn.setAttribute('data-last-toggle', String(now));
      var card = btn.closest('.popup-card');
      if (!card) return;
      var box = card.querySelector('.rental-box');
      if (!box) return;
      var open = box.style.display !== 'none';
      if (open) {
        box.style.display = 'none';
      } else {
        // populate content at open time (ensure CSV loaded first)
        var name = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  }; ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
      }
</body>
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  }; ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
      }
</body>
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  }; ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
      }
</body>
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);e = card.getAttribute('data-fname') || '';
        box.innerHTML = '<div class="rental-empty">読み込み中...</div>';
        ensureRentalsReady().then(function(){
              var items = cleanItems(getRentals({ name: name }));
          if (Array.isArray(items) && items.length) {
            box.innerHTML = renderRentalIcons(items);
            // after insertion, resolve images before showing to avoid flicker
            hydrateRentalIcons(box);
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
          } else {
            box.innerHTML = '<div class="rental-empty">情報がありません</div>';
          }
        }).catch(function(){
          box.innerHTML = '<div class="rental-empty">情報がありません</div>';
        });
        box.style.display = 'block';
      }
      var arrow = btn.querySelector('.r-arrow');
      if (arrow) arrow.textContent = open ? '▼' : '▲';
      btn.setAttribute('aria-expanded', String(!open));
    } catch(e) {}
  };
  // ensure toggle works even if inline handler is blocked by event capturing or map layer
  (function(){
    function handle(ev){
      var btn = ev.target && ev.target.closest ? ev.target.closest('.rental-toggle') : null;
      if (!btn) return;
      // debounce per-button to avoid double toggles
      var now = Date.now();
      var last = Number(btn.getAttribute('data-last-tap') || 0);
      if (now - last < 180) { ev.preventDefault(); ev.stopPropagation(); return; }
      btn.setAttribute('data-last-tap', String(now));
      ev.preventDefault();
      ev.stopPropagation();
      if (typeof window.toggleRentalBox === 'function') window.toggleRentalBox(btn);
    }
    // Use capture phase to preempt Leaflet's handlers
    document.addEventListener('click', handle, { capture: true });
    document.addEventListener('pointerdown', handle, { capture: true });
    document.addEventListener('mousedown', handle, { capture: true });
    document.addEventListener('touchstart', handle, { capture: true });
  })();
  // rentals data helper
  function normalizeName(s){
    return String(s||'')
      .toLowerCase()
      .replace(/wj/g,'ウォータージャンプ')
      .replace(/[\s　]+/g,'')
      .replace(/[（）()]/g,'')
      .replace(/[\-_.・]/g,'')
      .replace(/quest|クエスト/g,'クエスト')
      .replace(/brush\?/g,'brush?');
  }
  function isJunk(t){
    t = String(t||'').trim();
    if (!t) return true;
    if (/^[0-9０-９]+$/.test(t)) return true; // numeric-only
    if (/^[\-‐‑‒–—―ー−〜~]+$/.test(t)) return true; // dashes/tilde variants
    if (/^no[\.．]?[\s　]*\d*$/i.test(t)) return true; // No / No. / No.8 etc
    if (/^(?:no|no\.)$/i.test(t)) return true; // standalone No / No.
    if (/^(?:無|なし|n\/?a|na)$/i.test(t)) return true; // none markers
    return false;
  }
  // item name -> icon filename (put files under ./icons/)
  var RENTAL_ICONS = {
    // ski
    "スキー": "skiboard.png",
    "スキー板": "skiboard.png",
    // ski boots
    "スキーブーツ": "skibouts.png",
    "スキー ブーツ": "skibouts.png",
    "ブーツ(スキー)": "skibouts.png",
    // ski pole
    "スキーストック": "skistock.png",
    "ストック": "skistock.png",
    "ポール": "skistock.png",
    // snowboard
    "スノーボード": "snowboard.png",
    "スノーボード板": "snowboard.png",
    // snowboard boots
    "スノーボードブーツ": "snowboots.png",
    "スノーブーツ": "snowboots.png",
    "ボードブーツ": "snowboots.png",
    // binding
    "バインディング": "binding.png",
    "ビンディング": "binding.png",
    // safety
    "ヘルメット": "helmet.png",
    // water
    "ウェットスーツ": "wetsuit.png",
    "ライフジャケット": "wetsuit.png",
    "ライジャケ": "wetsuit.png"
  };

  function canonicalizeItem(label){
    var s = String(label||'').trim();
    // unify spaces (remove all), normalize slashes, drop simple parentheses notes
    // - handles: 'スキー 板' -> 'スキー板', 'スキー ストック' -> 'スキーストック'
    // - handles: fullwidth slash -> ascii, combined labels like 'ウェットスーツ／ライフジャケット'
    s = s.replace(/[（(].*?[）)]/g, '');   // remove parenthetical notes
    s = s.replace(/[／]/g, '/');          // normalize fullwidth slash
    s = s.replace(/\s+/g, '');            // remove all spaces
    // unify combined water-safety label into a canonical key
    if (s === 'ウェットスーツ/ライフジャケット' || s === 'ライフジャケット/ウェットスーツ') {
      s = 'ウェットスーツ';
    }
    // normalize split ski terms just in case (redundant after space removal, but safe)
    s = s.replace(/スキー板/g, 'スキー板');
    s = s.replace(/スキー(ストック|ポール)/g, 'スキーストック');
    return s;
  }
  function getIconInfo(label){
    var key = canonicalizeItem(label);
    // group: water safety (wetsuit/lifejacket)
    if (key === 'ウェットスーツ' || key === 'ライフジャケット' || key === 'ライジャケ') {
      return { icon: 'wetsuit.png', group: 'water_safety' };
    }
    var fn = RENTAL_ICONS[key] || RENTAL_ICONS[label];
    // fuzzy fallbacks for common variants (in case CSV/header wording differs)
    if (!fn) {
      // ski board
      if (key.indexOf('スキー板') >= 0 || (/スキー.*板/.test(key)) || (/板.*スキー/.test(key)) || (/スキー/.test(key) && !/(ブーツ|ストック|ポール)/.test(key))) {
        fn = 'skiboard.png';
      }
</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

      // ski stock/pole
      else if (key.indexOf('スキーストック') >= 0 || key.indexOf('ストック') >= 0 || key.indexOf('ポール') >= 0) {
        fn = 'skistock.png';
      }
      // snowboard board (not boots)
      else if ((/スノーボード/.test(key) || /スノボ/.test(key)) && !/ブーツ/.test(key)) {
        fn = 'snowboard.png';
      }
      // wetsuit / life jacket (separately written)
      else if (key.indexOf('ウェットスーツ') >= 0 || key.indexOf('ライフジャケット') >= 0 || key.indexOf('ライジャケ') >= 0) {
        fn = 'wetsuit.png';
      }
    }
    if (fn) return { icon: fn, group: fn };
    return { icon: null, group: null };
  }

  // image fallback handler: try multiple paths, then degrade to text pill
  window.onRentalImgError = function(img){
    try {
      var sources = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
      var idx = parseInt(img.getAttribute('data-f')||'0', 10);
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>
      if (idx + 1 < sources.length) {
        img.setAttribute('data-f', String(idx + 1));
        img.src = sources[idx + 1];
        return;
      }
      // final fallback: replace with pill
      var title = img.getAttribute('data-title') || '';
      var pill = document.createElement('div');
      pill.className = 'ri ri-pill';
      pill.title = title;
      pill.textContent = title;
      var parent = img.parentNode;
      if (parent && parent.parentNode) {
        parent.parentNode.replaceChild(pill, parent);
      }
    } catch(e) {
      try {
        var p = img.parentNode;
        if (p && p.parentNode) {
          var d = document.createElement('div');
          d.className = 'ri ri-pill';
          d.textContent = img.getAttribute('data-title') || '';
          p.parentNode.replaceChild(d, p);
        }
      } catch(_) {}
    }
  };

  function renderRentalIcons(items){
    var html = ['<div class="rental-icons">'];
    // group items so synonyms share one icon
    var byGroup = {};
    var pills = [];
    items.forEach(function(label){
      var info = getIconInfo(label);
      if (info.icon) {
        if (!byGroup[info.group]) byGroup[info.group] = { icon: info.icon, labels: [] };
        byGroup[info.group].labels.push(label);
      } else {
        pills.push(label);
      }
    });
    Object.keys(byGroup).forEach(function(g){
      var fn = byGroup[g].icon;
      var labels = Array.from(new Set(byGroup[g].labels));
      var title = labels.join('／');
      // Multi-path fallback to avoid path/redirect issues on some hosts
      var ORG = (typeof location!=='undefined' && /^https?:/i.test(location.origin)) ? location.origin : '';
      var src0 = (ORG ? (ORG + '/icons/' + fn + '?v=20251112a') : '/icons/' + fn + '?v=20251112a'); // prefer absolute origin first
      var src1 = '/icons/' + fn + '?v=20251112a';
      var src2 = './icons/' + fn + '?v=20251112a';
      var src3 = 'icons/' + fn + '?v=20251112a';
      var src4 = '/icons/' + fn;
      var src5 = (ORG ? (ORG + '/icons/' + fn) : '');
      var srcs = [src0, src1, src2, src3, src4, src5].filter(Boolean).join('|');
      var itemHtml = '<div class="ri" ontouchstart="window.showRentalCap(this)" onclick="window.showRentalCap(this)">' +
        '<img class="lazy-rental" data-srcs="'+srcs+'" data-f="0" data-title="'+title+'" alt="'+title+'" title="'+title+'" style="opacity:0;"/>' +
        '<div class="ri-cap">'+title+'</div>' +
      '</div>';
      html.push(itemHtml);
    });
    pills.forEach(function(label){
      html.push('<div class="ri ri-pill" title="'+label+'">'+label+'</div>');
    });
    html.push('</div>');
    return html.join('');
  }
  // hydrate images after DOM insertion: sequentially preload and set final src
  async function hydrateRentalIcons(root){
    try{
      var imgs = (root || document).querySelectorAll('img.lazy-rental');
      if (!imgs || !imgs.length) return;
      function tryLoad(url){
        return new Promise(function(resolve){
          if (!url) { resolve(false); return; }
          var i = new Image();
          i.onload = function(){ resolve(true); };
          i.onerror = function(){ resolve(false); };
          i.src = url;
        });
      }
      for (var k=0;k<imgs.length;k++){
        var img = imgs[k];
        try{
          var list = String(img.getAttribute('data-srcs')||'').split('|').filter(Boolean);
          var okUrl = null;
          for (var j=0;j<list.length;j++){
            /* eslint no-await-in-loop: off */
            var ok = await tryLoad(list[j]);
            if (ok) { okUrl = list[j]; break; }
          }
          if (okUrl){
            img.src = okUrl;
            img.style.opacity = '1';
          }else{
            var title = img.getAttribute('data-title')||'';
            var pill = document.createElement('div');
            pill.className = 'ri ri-pill';
            pill.title = title;
            pill.textContent = title;
            var parent = img.parentNode;
            if (parent && parent.parentNode) parent.parentNode.replaceChild(pill, parent);
          }
        }catch(e){}
      }
    }catch(e){}
  }
  function cleanItems(list){
    var seen = new Set();
    var out = [];
    (Array.isArray(list) ? list : []).forEach(function(raw){
      var t = String(raw||'').trim();
    if (!t) return;
    // split combined labels like "ウェットスーツ／ライフジャケット", also handle '/', '・'
    var parts = t.split(/[／/・]/g).map(function(s){ return s.trim(); }).filter(Boolean);
    if (parts.length === 0) parts = [''];
    parts.forEach(function(p){
        // normalize synonyms aggressively so iconマッピングに必ず乗る
        var k = canonicalizeItem(p);
        // ski board
        if (/スキー.*板/.test(k) || /板.*スキー/.test(k)) k = 'スキー板';
        // ski stock / pole
        if (/^(?:スキー)?(?:ストック|ポール)$/.test(k)) k = 'スキーストック';
        // wetsuit / life jacket (use unified key;表示ラベルは後段で結合)
        if (/(ウェットスーツ|ライフジャケット|ライジャケ)/.test(k)) {
          k = k.indexOf('ライ') >= 0 ? 'ライフジャケット' : 'ウェットスーツ';
        }
        // keep original label for user-facing pill/title, but use normalized key for dedupe
        var display = (/ライフジャケット|ウェットスーツ/).test(k) ? (k) : p;
      if (isJunk(p)) return;
        if (!seen.has(k)) { seen.add(k); out.push(display); }
    });
    });
    return out;
  }
  window.getRentals = function(f){
    try {
      if (f && Array.isArray(f.rentals)) return f.rentals;
      var map = window.RENTALS_OF || {};
      var key = f && f.name ? f.name : '';
      var exact = map[key];
      if (Array.isArray(exact)) return exact;
      // fuzzy by normalized name keys
      var nk = normalizeName(key);
      for (var k in map){
        if (!Object.prototype.hasOwnProperty.call(map,k)) continue;
        var nmk = normalizeName(k);
        if (nmk === nk || nmk.includes(nk) || nk.includes(nmk)) return map[k];
      }
      return [];
    } catch(e) { return []; }
  }
  // optional preset
  window.RENTALS_OF = window.RENTALS_OF || {};
  // tap caption helper: show for 2 seconds
  window.showRentalCap = (function(){
    var timers = new WeakMap();
    return function(el){
      try {
        el.classList.add('show-cap');
        if (timers.has(el)) clearTimeout(timers.get(el));
        var t = setTimeout(function(){ el.classList.remove('show-cap'); }, 2000);
        timers.set(el, t);
      } catch(e) {}
    };
  })();
  </script>


  <script>
  // --- Parking popup helper (non-destructive) ---
  (function() {
    if (!window.L) return;
    // Get facilities from either window.facilities or global binding
    var facs = null;
    try { if (Array.isArray(window.facilities)) facs = window.facilities; } catch(e) {}
    if (!facs) { try { if (typeof facilities !== 'undefined' && Array.isArray(facilities)) facs = facilities; } catch(e) {} }
    if (!facs) return;

    if (window._parkingInjected) return;
    window._parkingInjected = true;

    // Try to get the Leaflet map instance
    var _map = window.map;
    if (!_map) {
      try {
        for (var k in window) {
          if (window[k] && window[k] instanceof L.Map) { _map = window[k]; break; }
        }
      } catch(e) {}
    }
    if (!_map) return;

    if (_map && typeof _map.eachLayer === 'function') {
  _map.eachLayer(function(layer){
    try {
      if (layer && typeof layer.getLatLng === 'function') {
        var ll = layer.getLatLng();
        var fac = facs.find(function(f){
          return Math.abs(f.lat - ll.lat) < 1e-6 && Math.abs(f.lon - ll.lng) < 1e-6;
        });
        if (!fac) return;
        var extra = "🚗 駐車: " + (fac.parking || "不明");
        if (layer.getPopup && layer.getPopup()) {
          var existing = layer.getPopup().getContent();
          if (typeof existing === 'string') {
            if (existing.indexOf("駐車:") >= 0) return;
            layer.setPopupContent(existing + (existing ? "<br/>" : "") + extra);
          }
        } else if (layer.bindPopup) {
          var base = "<strong>" + (fac.name || "") + "</strong>";
          if (fac.type) base += "<br/>" + fac.type;
          if (fac.pref_city) base += "<br/>" + fac.pref_city;
          layer.bindPopup(base + "<br/>" + extra);
        }
      }
    } catch(e) {}
  });
}
  })();
  </script>

</body>
</html>