<!-- 펜톤나인 [C05] White Shore 객실 페이지 (한/영/번체/간체) — oopy 코드블럭용 HTML 조각 (html/head/body 태그 없음) -->
<style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700&family=Noto+Sans+TC:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;600;700&display=swap');
#p9C05Page {
--p9c5-ink: #222222;
--p9c5-sub: #717171;
--p9c5-line: #ebebeb;
--p9c5-accent: #FF385C;
--p9c5-bg-soft: #f7f7f7;
}
#p9C05Page {
font-family: 'Noto Sans KR', 'Noto Sans TC', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Apple SD Gothic Neo', sans-serif;
color: var(--p9c5-ink);
max-width: 720px;
margin: 0 auto;
padding: 8px 20px 64px;
line-height: 1.65;
word-break: keep-all;
-webkit-font-smoothing: antialiased;
}
#p9C05Page * { box-sizing: border-box; }
#p9C05Page svg { display: block; flex: none; }
/* ── 상단 경로 / 언어 / 공유 ── */
#p9C05Page .p9c5-topbar {
display: flex; align-items: center; justify-content: space-between;
gap: 10px; padding: 6px 0 16px; font-size: 13px; color: var(--p9c5-sub);
}
#p9C05Page .p9c5-crumb { min-width: 0; }
#p9C05Page .p9c5-crumb b { color: var(--p9c5-ink); font-weight: 600; }
#p9C05Page .p9c5-actions { display: flex; align-items: center; gap: 6px; flex: none; }
#p9C05Page .p9c5-share {
display: inline-flex; align-items: center; gap: 7px;
border: none; background: transparent; cursor: pointer;
font: inherit; font-size: 13px; font-weight: 600; color: var(--p9c5-ink);
text-decoration: underline; text-underline-offset: 3px;
padding: 8px 10px; border-radius: 8px;
}
#p9C05Page .p9c5-share:hover { background: var(--p9c5-bg-soft); }
#p9C05Page .p9c5-lang {
display: inline-flex; align-items: center;
border: 1px solid var(--p9c5-line); border-radius: 999px; padding: 3px;
}
#p9C05Page .p9c5-lang button {
border: none; background: transparent; cursor: pointer;
font: inherit; font-size: 12px; font-weight: 600; color: var(--p9c5-sub);
padding: 4px 10px; border-radius: 999px; line-height: 1.4;
}
#p9C05Page .p9c5-lang button.on { background: var(--p9c5-ink); color: #fff; }
/* ── 히어로 갤러리 ── */
#p9C05Page .p9c5-gallery {
display: grid; grid-template-columns: 2fr 1fr; grid-template-rows: 158px 158px;
gap: 8px; border-radius: 14px; overflow: hidden; margin-bottom: 32px;
}
#p9C05Page .p9c5-gallery .p9c5-ph { width: 100%; height: 100%; object-fit: cover; display: block; }
#p9C05Page .p9c5-gallery .p9c5-main { grid-row: 1 / 3; }
#p9C05Page .p9c5-noimg {
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 8px; width: 100%; height: 100%;
background: #f2f2f2; color: #c4c4c4; font-size: 12px; font-weight: 500;
}
/* ── 타이틀 ── */
#p9C05Page .p9c5-h1 { font-size: 25px; font-weight: 700; margin: 0 0 6px; letter-spacing: -0.4px; }
#p9C05Page .p9c5-stats { font-size: 15px; color: var(--p9c5-ink); margin: 0 0 4px; font-weight: 500; }
#p9C05Page .p9c5-stats2 { font-size: 14px; color: var(--p9c5-sub); margin: 0; }
#p9C05Page .p9c5-divider { border: none; border-top: 1px solid var(--p9c5-line); margin: 32px 0; }
/* ── 하이라이트 행 ── */
#p9C05Page .p9c5-feat { display: flex; gap: 18px; padding: 15px 0; align-items: flex-start; }
#p9C05Page .p9c5-feat + .p9c5-feat { border-top: 1px solid var(--p9c5-line); }
#p9C05Page .p9c5-feat svg { margin-top: 2px; }
#p9C05Page .p9c5-feat h4 { margin: 0 0 2px; font-size: 15.5px; font-weight: 600; }
#p9C05Page .p9c5-feat p { margin: 0; font-size: 14px; color: var(--p9c5-sub); }
/* ── 섹션 제목 ── */
#p9C05Page .p9c5-h2 { font-size: 20px; font-weight: 700; margin: 0 0 4px; letter-spacing: -0.3px; }
#p9C05Page .p9c5-h2sub { font-size: 14px; color: var(--p9c5-sub); margin: 0 0 20px; }
/* ── 객실 정보 카드 ── */
#p9C05Page .p9c5-info { border: 1px solid var(--p9c5-line); border-radius: 14px; padding: 24px; }
#p9C05Page .p9c5-infoitem { display: flex; gap: 14px; padding: 12px 0; align-items: flex-start; }
#p9C05Page .p9c5-infoitem + .p9c5-infoitem { border-top: 1px solid var(--p9c5-line); }
#p9C05Page .p9c5-infoitem svg { margin-top: 2px; }
#p9C05Page .p9c5-infoitem b { display: block; font-size: 14px; font-weight: 600; }
#p9C05Page .p9c5-infoitem span { font-size: 13px; color: var(--p9c5-sub); }
/* ── 잠자리 구성 카드 (에어비앤비 "Where you'll sleep" 스타일) ── */
#p9C05Page .p9c5-layout { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }
#p9C05Page .p9c5-layout .cell {
border: 1px solid var(--p9c5-line); border-radius: 12px;
padding: 20px 18px; display: flex; flex-direction: column;
}
#p9C05Page .p9c5-layout .icons { display: flex; align-items: flex-end; gap: 4px; flex-wrap: wrap; margin-bottom: 12px; }
#p9C05Page .p9c5-layout .cell svg { margin-bottom: 0; }
#p9C05Page .p9c5-layout .cell .txt { width: 100%; }
#p9C05Page .p9c5-layout .xn { font-size: 13px; font-weight: 700; color: var(--p9c5-sub); align-self: center; margin-left: 1px; }
#p9C05Page .p9c5-layout .cap { font-size: 15px; font-weight: 600; margin-bottom: 2px; }
#p9C05Page .p9c5-layout .beds { font-size: 13.5px; color: var(--p9c5-sub); }
#p9C05Page .p9c5-cap {
display: inline-flex; align-items: center; gap: 5px; align-self: flex-start;
margin-top: 12px; font-size: 12px; font-weight: 600;
background: var(--p9c5-bg-soft); border-radius: 999px; padding: 4px 10px;
}
#p9C05Page .p9c5-total {
display: flex; gap: 10px; align-items: center;
margin-top: 14px; font-size: 13.5px; color: var(--p9c5-sub);
}
/* ── 편의시설 ── */
#p9C05Page .p9c5-amen { display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; }
#p9C05Page .p9c5-amen .item {
display: flex; align-items: center; gap: 14px;
font-size: 14.5px; padding: 13px 0; border-bottom: 1px solid var(--p9c5-line);
}
/* ── 부대시설 / 추가 서비스 카드 ── */
#p9C05Page .p9c5-fac { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
#p9C05Page .p9c5-fac .cell {
border: 1px solid var(--p9c5-line); border-radius: 14px; padding: 22px 20px;
}
#p9C05Page .p9c5-fac .cell svg { margin-bottom: 14px; }
#p9C05Page .p9c5-fac b { display: block; font-size: 15.5px; font-weight: 600; margin-bottom: 2px; }
#p9C05Page .p9c5-fac .fdesc { font-size: 13.5px; color: var(--p9c5-sub); }
#p9C05Page .p9c5-fac .frow {
display: flex; align-items: center; justify-content: space-between;
gap: 10px; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--p9c5-line);
}
#p9C05Page .p9c5-fac .fprice { font-size: 15px; font-weight: 700; white-space: nowrap; }
#p9C05Page .p9c5-fac .cell:nth-child(odd):last-child { grid-column: 1 / -1; }
#p9C05Page .p9c5-fac a.cell { display: block; text-decoration: none; color: inherit; transition: background .15s; }
#p9C05Page .p9c5-fac a.cell:hover { background: var(--p9c5-bg-soft); }
#p9C05Page .p9c5-fac b { display: flex; align-items: center; gap: 6px; }
#p9C05Page .p9c5-fac .farrow { transition: transform .15s; }
#p9C05Page .p9c5-fac a.cell:hover .farrow { transform: translateX(3px); }
#p9C05Page .p9c5-fac .fmore {
display: inline-block; margin-top: 12px; font-size: 13px; font-weight: 600;
text-decoration: underline; text-underline-offset: 3px;
}
/* ── 스페셜딜 배너 ── */
#p9C05Page .p9c5-deal {
display: block; text-decoration: none; color: inherit;
border: 1.5px solid var(--p9c5-ink); border-radius: 14px;
padding: 20px 22px; transition: background .15s;
}
#p9C05Page .p9c5-deal:hover { background: var(--p9c5-bg-soft); }
#p9C05Page .p9c5-deal .dtag {
display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: 0.14em;
color: #fff; background: var(--p9c5-accent); border-radius: 4px;
padding: 3px 9px; margin-bottom: 8px;
}
#p9C05Page .p9c5-deal b { display: block; font-size: 15.5px; font-weight: 700; margin-bottom: 2px; }
#p9C05Page .p9c5-deal p { margin: 0; font-size: 13.5px; color: var(--p9c5-sub); }
#p9C05Page .p9c5-deal .cta { display: inline-block; margin-top: 10px; font-size: 13.5px; font-weight: 700; color: var(--p9c5-ink); }
/* ── 평면도 / 사진 그리드 ── */
#p9C05Page .p9c5-photos { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; border-radius: 14px; overflow: hidden; }
#p9C05Page .p9c5-photos .cell:first-child { grid-column: 1 / -1; }
#p9C05Page .p9c5-photos img { width: 100%; height: 200px; object-fit: cover; display: block; }
#p9C05Page .p9c5-photos .cell:first-child img { height: 300px; }
/* ── 페이지 안에서 열리는 모달 ── */
#p9c5Modal {
--p9c5-ink: #222222;
--p9c5-sub: #717171;
--p9c5-line: #ebebeb;
--p9c5-bg-soft: #f7f7f7;
font-family: 'Noto Sans KR', 'Noto Sans TC', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Apple SD Gothic Neo', sans-serif;
color: var(--p9c5-ink);
box-sizing: border-box;
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
width: 100%; height: 100%;
z-index: 2147483000;
display: none; align-items: center; justify-content: center;
padding: 24px;
}
#p9c5Modal * { box-sizing: border-box; }
#p9c5Modal svg { display: block; flex: none; }
#p9c5Modal.on { display: flex; }
#p9c5Modal .bg { position: absolute; inset: 0; background: rgba(0,0,0,0.55); }
#p9c5Modal .panel {
position: relative; z-index: 1;
width: 100%; max-width: 900px; height: 88vh;
background: #fff; border-radius: 16px; overflow: hidden;
display: flex; flex-direction: column;
box-shadow: 0 18px 60px rgba(0,0,0,0.28);
}
#p9c5Modal .mhead {
display: flex; align-items: center; gap: 12px;
padding: 14px 16px; border-bottom: 1px solid var(--p9c5-line); flex: none;
}
#p9c5Modal .mtitle { font-size: 15px; font-weight: 700; flex: 1; min-width: 0; }
#p9c5Modal .mnew {
font-size: 12.5px; font-weight: 600; color: var(--p9c5-sub);
text-decoration: underline; text-underline-offset: 3px; white-space: nowrap;
}
#p9c5Modal .mclose {
border: none; background: transparent; cursor: pointer; padding: 6px;
border-radius: 50%; color: var(--p9c5-ink); line-height: 0;
}
#p9c5Modal .mclose:hover { background: var(--p9c5-bg-soft); }
#p9c5Modal .mbody { flex: 1; position: relative; background: #fff; }
#p9c5Modal iframe { width: 100%; height: 100%; border: 0; display: block; }
#p9c5Modal .mfall {
position: absolute; inset: 0; display: none;
flex-direction: column; align-items: center; justify-content: center;
gap: 12px; text-align: center; padding: 24px; font-size: 14px; color: var(--p9c5-sub);
}
#p9c5Modal.fallback .mfall { display: flex; }
#p9c5Modal.fallback iframe { visibility: hidden; }
#p9c5Modal .mfall a {
display: inline-flex; align-items: center; gap: 8px;
border: 1px solid var(--p9c5-ink); border-radius: 8px; padding: 10px 16px;
font-size: 13.5px; font-weight: 600; color: var(--p9c5-ink); text-decoration: none;
}
#p9C05Page .p9c5-toast {
position: fixed; left: 50%; bottom: 32px; transform: translateX(-50%) translateY(16px);
background: var(--p9c5-ink); color: #fff; font-size: 13px; font-weight: 500;
padding: 10px 18px; border-radius: 999px; opacity: 0; pointer-events: none;
transition: all .25s ease; z-index: 9999;
}
#p9C05Page .p9c5-toast.on { opacity: 1; transform: translateX(-50%) translateY(0); }
@media (max-width: 560px) {
#p9C05Page { padding: 8px 16px 56px; }
#p9C05Page .p9c5-gallery { grid-template-rows: 112px 112px; }
#p9C05Page .p9c5-h1 { font-size: 22px; }
#p9C05Page .p9c5-amen { grid-template-columns: 1fr; }
#p9C05Page .p9c5-layout { grid-template-columns: 1fr; gap: 10px; }
#p9C05Page .p9c5-layout .cell { flex-direction: row; align-items: flex-start; gap: 16px; padding: 18px; }
#p9C05Page .p9c5-layout .icons { margin-bottom: 0; margin-top: 2px; flex: none; }
#p9C05Page .p9c5-layout .cell .txt { flex: 1; min-width: 0; }
#p9C05Page .p9c5-cap { margin-top: 8px; }
#p9C05Page .p9c5-fac { grid-template-columns: 1fr; }
#p9c5Modal { padding: 0; }
#p9c5Modal .panel { height: 100%; max-width: none; border-radius: 0; }
#p9C05Page .p9c5-photos img { height: 145px; }
#p9C05Page .p9c5-photos .cell:first-child img { height: 215px; }
#p9C05Page .p9c5-topbar { flex-wrap: wrap; }
#p9C05Page .p9c5-crumb { order: 2; width: 100%; }
#p9C05Page .p9c5-actions { order: 1; margin-left: auto; }
}
</style>
<div id="p9C05Page">
<div class="p9c5-topbar">
<div class="p9c5-crumb" data-t="crumb"></div>
<div class="p9c5-actions">
<div class="p9c5-lang" role="group" aria-label="Language">
<button type="button" data-p9c5-lang="ko" class="on">한국어</button>
<button type="button" data-p9c5-lang="en">EN</button>
<button type="button" data-p9c5-lang="zh">繁中</button>
<button type="button" data-p9c5-lang="cn">简中</button>
</div>
<button class="p9c5-share" type="button" data-p9c5-share>
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg>
<span data-t="share"></span>
</button>
</div>
</div>
<div class="p9c5-gallery" id="p9c5Gallery"></div>
<h1 class="p9c5-h1">[C05] White Shore</h1>
<p class="p9c5-stats" data-t="stats"></p>
<p class="p9c5-stats2" data-t="stats2"></p>
<hr class="p9c5-divider">
<div class="p9c5-feat">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h20"/><path d="M2 17c2 1.5 4 1.5 6 0s4-1.5 6 0 4 1.5 6 0"/><path d="M2 7c2 1.5 4 1.5 6 0s4-1.5 6 0 4 1.5 6 0"/></svg>
<div><h4 data-t="feat1t"></h4><p data-t="feat1d"></p></div>
</div>
<div class="p9c5-feat">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"/></svg>
<div><h4 data-t="feat2t"></h4><p data-t="feat2d"></p></div>
</div>
<div class="p9c5-feat">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12h16a1 1 0 0 1 1 1v2a5 5 0 0 1-5 5H8a5 5 0 0 1-5-5v-2a1 1 0 0 1 1-1z"/><path d="M6 12V6a3 3 0 0 1 6 0"/><line x1="8" y1="22" x2="8" y2="20"/><line x1="16" y1="22" x2="16" y2="20"/></svg>
<div><h4 data-t="feat3t"></h4><p data-t="feat3d"></p></div>
</div>
<hr class="p9c5-divider">
<h2 class="p9c5-h2" data-t="infoT"></h2>
<p class="p9c5-h2sub" data-t="infoS"></p>
<div class="p9c5-info">
<div class="p9c5-infoitem">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
<div><b data-t="info1t"></b><span data-t="info1d"></span></div>
</div>
<div class="p9c5-infoitem">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
<div><b data-t="info2t"></b><span data-t="info2d"></span></div>
</div>
<div class="p9c5-infoitem">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
<div><b data-t="info3t"></b><span data-t="info3d"></span></div>
</div>
</div>
<hr class="p9c5-divider">
<h2 class="p9c5-h2" data-t="layoutT"></h2>
<p class="p9c5-h2sub" data-t="layoutS"></p>
<div class="p9c5-layout" id="p9c5Layout"></div>
<div class="p9c5-total">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
<span data-t="totalBeds"></span>
</div>
<hr class="p9c5-divider">
<h2 class="p9c5-h2" data-t="amenT"></h2>
<p class="p9c5-h2sub" data-t="amenS"></p>
<div class="p9c5-amen" id="p9c5Amen"></div>
<hr class="p9c5-divider">
<h2 class="p9c5-h2" data-t="addonT"></h2>
<p class="p9c5-h2sub" data-t="addonS"></p>
<div class="p9c5-fac" id="p9c5Fac"></div>
<div class="p9c5-total">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>
<span data-t="addonNote"></span>
</div>
<hr class="p9c5-divider">
<a class="p9c5-deal" href="https://www.penton9.com/deal">
<span class="dtag">SPECIAL DEAL</span>
<b data-t="dealT"></b>
<p data-t="dealD"></p>
<span class="cta" data-t="dealC"></span>
</a>
<hr class="p9c5-divider">
<h2 class="p9c5-h2" data-t="photoT"></h2>
<p class="p9c5-h2sub" data-t="photoS"></p>
<div class="p9c5-photos" id="p9c5Photos"></div>
<hr class="p9c5-divider">
<h2 class="p9c5-h2" data-t="ryoT"></h2>
<p class="p9c5-h2sub" data-t="ryoS"></p>
<div class="p9c5-photos" id="p9c5Ryokan"></div>
<div class="p9c5-modal" id="p9c5Modal" role="dialog" aria-modal="true">
<div class="bg" data-p9c5-close></div>
<div class="panel">
<div class="mhead">
<div class="mtitle" id="p9c5ModalTitle"></div>
<a class="mnew" id="p9c5ModalNew" href="#" target="_blank" rel="noopener" data-t="openNewTab"></a>
<button class="mclose" type="button" data-p9c5-close aria-label="close">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
<div class="mbody">
<iframe id="p9c5ModalFrame" title="" loading="lazy"></iframe>
<div class="mfall">
<span data-t="fallbackMsg"></span>
<a id="p9c5ModalFallLink" href="#" target="_blank" rel="noopener" data-t="openNewTab"></a>
</div>
</div>
</div>
</div>
<div class="p9c5-toast" id="p9c5Toast"></div>
</div>
<script>
(function() {
/* =============================================
✅ 콘텐츠 데이터 — 여기서만 수정하세요
============================================= */
var IMG = 'https://oopy.lazyrockets.com/api/v2/notion/image?src=';
/* 히어로 갤러리 3장 (거실 오션뷰 / 식탁 / 침실) */
var GALLERY = [
/* 왼쪽 큰 사진 — C05 대표 (오션뷰) */
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F857ad05f-6b6e-4352-8b96-e686e6062ac7%2FC05_%25EB%25A9%2594%25EC%259D%25B8%25EC%2582%25AC%25EC%25A7%2584.png&blockId=137855f1-e498-80ef-921b-da8775ff3f5a',
/* 오른쪽 위 — 거실 */
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F8b2784e6-973d-40ad-bbd4-6dd2b85c3c43%2FC05_%25EA%25B1%25B0%25EC%258B%25A4_1.jpg&blockId=137855f1-e498-807f-bd05-c764a4f590d8',
/* 오른쪽 아래 — 객실 */
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F21133beb-d800-4e95-ad2a-68ea51381907%2FC05_Room1.png&blockId=137855f1-e498-8086-915c-ee1b1c9b4b14'
];
/* ── 잠자리 구성 ──
icon: 'queen'(퀸·2인) | 'single'(슈퍼싱글·1인) | 'family'(패밀리·3인) | 'mattress'(매트리스·1인)
개수 지정: [{ t: 'queen', n: 2 }] / 침대가 섞인 방: ['queen','single'] */
var LAYOUT = [
{ icon: [{ t: 'queen', n: 2 }],
cap: { ko: '침실 1', en: 'Bedroom 1', zh: '臥室 1', cn: '卧室 1' },
beds: { ko: '퀸 침대 2개', en: '2 queen beds', zh: 'Queen床 2張', cn: 'Queen床 2张' },
guest: { ko: '4명', en: '4 guests', zh: '4人', cn: '4人' } },
{ icon: 'queen',
cap: { ko: '침실 2', en: 'Bedroom 2', zh: '臥室 2', cn: '卧室 2' },
beds: { ko: '퀸 침대 1개', en: '1 queen bed', zh: 'Queen床 1張', cn: 'Queen床 1张' },
guest: { ko: '2명', en: '2 guests', zh: '2人', cn: '2人' } },
{ icon: 'queen',
cap: { ko: '침실 3', en: 'Bedroom 3', zh: '臥室 3', cn: '卧室 3' },
beds: { ko: '퀸 침대 1개', en: '1 queen bed', zh: 'Queen床 1張', cn: 'Queen床 1张' },
guest: { ko: '2명', en: '2 guests', zh: '2人', cn: '2人' } },
{ icon: [{ t: 'mattress', n: 6 }],
cap: { ko: '엑스트라', en: 'Extra bedding', zh: '加鋪', cn: '加铺' },
beds: { ko: '매트리스 6개', en: '6 floor mattresses', zh: '床墊 6組', cn: '床垫 6组' },
guest: { ko: '6명', en: '6 guests', zh: '6人', cn: '6人' } }
];
/* ── 부대시설 / 추가 서비스 ──
icon: 'bbq' | 'jacuzzi' | 'pool' / link 를 넣으면 카드 전체가 모달로 열려요 */
var FACILITY = [
{ icon: 'bbq', price: '₩50,000', link: 'https://www.penton9.com/bbq',
name: { ko: '프라이빗 숯불바베큐', en: 'Private charcoal BBQ', zh: '私人炭火燒烤', cn: '私人炭火烧烤' },
desc: { ko: '가스가 아닌 국산 참숯 · 훈연 그릴을 사용해요. 우리 팀만 쓰는 독립 공간.',
en: 'Real Korean charcoal and a smoker grill — not gas. In a space just for your group.',
zh: '使用韓國木炭與煙燻烤爐,而非瓦斯。專屬您們一組的獨立空間。',
cn: '使用韩国木炭与烟熏烤炉,而非燃气。专属您们一组的独立空间。' },
tag: { ko: '선착순 예약 필수', en: 'First-come reservation', zh: '需先預約(先到先得)', cn: '需先预约(先到先得)' } },
{ icon: 'jacuzzi', price: '₩50,000', link: 'https://www.penton9.com/spa',
name: { ko: '프라이빗 자쿠지 (료칸)', en: 'Private jacuzzi (ryokan)', zh: '私人按摩浴缸(湯屋)', cn: '私人按摩浴缸(汤屋)' },
desc: { ko: '일상의 소음이 닿지 않는 별채 온수 스파예요. 한 팀만 단독으로 사용해요.',
en: 'A hot-water spa in the annex, away from everyday noise — reserved for one group at a time.',
zh: '設於別館、遠離日常喧囂的溫水SPA,一組客人專屬使用。',
cn: '设于别馆、远离日常喧嚣的温水SPA,一组客人专属使用。' },
tag: { ko: '예약제 · 한 팀 단독', en: 'By reservation · one group', zh: '預約制 · 一組專屬', cn: '预约制 · 一组专属' } },
{ icon: 'pool', price: '무료', link: 'https://www.penton9.com/pool',
name: { ko: '루프탑 야외 풀', en: 'Rooftop outdoor pool', zh: '頂樓戶外泳池', cn: '顶楼户外泳池' },
desc: { ko: '시간대별 예약제로 운영되는 루프탑 풀이에요. 이용료는 무료.',
en: 'A rooftop pool run on hourly reservations — free to use.',
zh: '採時段預約制的頂樓泳池,免費使用。',
cn: '采用时段预约制的顶楼泳池,免费使用。' },
tag: { ko: '5~9월 시즌 · 예약 필요', en: 'May–Sep season · booking required', zh: '5~9月開放 · 需預約', cn: '5~9月开放 · 需预约' } },
{ icon: 'laundry', price: '₩30,000', link: 'https://www.penton9.com/laundry',
name: { ko: '단체 세탁 서비스', en: 'Group laundry service', zh: '團體洗衣服務', cn: '团体洗衣服务' },
desc: { ko: '인원이 많으면 빨랫감도 금방 쌓이죠. 문 앞에 내놓기만 하면 세탁해서 문 앞으로 다시 가져다드려요.',
en: 'With a big group, laundry piles up fast. Leave it at the door — we wash it and bring it back to your door.',
zh: '人一多,待洗衣物很快就堆起來。只要放在門口,我們洗好後再送回您的門口。',
cn: '人一多,待洗衣物很快就堆起来。只要放在门口,我们洗好后再送回您的门口。' },
tag: { ko: '마대 1개 · 최대 20kg', en: 'One bag · up to 20kg', zh: '每袋 · 最多20kg', cn: '每袋 · 最多20kg' } }
];
/* 편의시설 목록 (4개 언어) */
var AMEN = [
{ ko: 'TV', en: 'TV', zh: '電視', cn: '电视' },
{ ko: '소파', en: 'Sofa', zh: '沙發', cn: '沙发' },
{ ko: '냉장고', en: 'Refrigerator', zh: '冰箱', cn: '冰箱' },
{ ko: '전자렌지 · 전기포트', en: 'Microwave & electric kettle', zh: '微波爐 · 快煮壺', cn: '微波炉 · 电热水壶' },
{ ko: '인덕션 (2구)', en: 'Induction cooktop (2 burners)', zh: '電磁爐(雙口)', cn: '电磁炉(双口)' },
{ ko: '냄비 · 프라이팬', en: 'Pots & frying pans', zh: '鍋具 · 平底鍋', cn: '锅具 · 平底锅' },
{ ko: '식탁 · 의자', en: 'Dining table & chairs', zh: '餐桌 · 椅子', cn: '餐桌 · 椅子' },
{ ko: '조리도구 (칼 · 가위 · 도마 · 국자 · 집게)', en: 'Cookware (knife, scissors, board, ladle, tongs)', zh: '烹調用具(刀·剪刀·砧板·湯勺·夾子)', cn: '烹调用具(刀·剪刀·砧板·汤勺·夹子)' },
{ ko: '식기 (머그컵 · 그릇 · 접시 · 수저)', en: 'Tableware (mugs, bowls, plates, cutlery)', zh: '餐具(馬克杯·碗·盤·筷匙)', cn: '餐具(马克杯·碗·盘·筷勺)' },
{ ko: '와인잔 · 와인오프너', en: 'Wine glasses & opener', zh: '紅酒杯 · 開瓶器', cn: '红酒杯 · 开瓶器' },
{ ko: '아기의자', en: 'High chair', zh: '兒童餐椅', cn: '儿童餐椅' },
{ ko: '화장대 · 드라이기', en: 'Vanity & hair dryer', zh: '化妝台 · 吹風機', cn: '化妆台 · 吹风机' },
{ ko: '샴푸 · 린스 · 바디워시 · 비누', en: 'Shampoo, conditioner, body wash & soap', zh: '洗髮精 · 潤髮乳 · 沐浴乳 · 香皂', cn: '洗发水 · 护发素 · 沐浴露 · 香皂' }
];
/* 객실사진 (첫 장 가로 전체 + 2열)
※ 앞의 3장은 상단 히어로에 쓴 대표 사진과 동일 — 갤러리에서도 다시 보여줍니다. */
var PHOTOS = [
GALLERY[0], /* C05 대표 (오션뷰) */
GALLERY[1], /* 거실 (대표) */
GALLERY[2], /* 객실 (대표) */
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F855f0748-bd12-4f0e-b7ec-f504c9afb235%2FC05_%25EA%25B1%25B0%25EC%258B%25A4_2.jpg&blockId=137855f1-e498-80b4-807c-ebdc9319ca4d',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Ff1d0d4b3-5e35-4ba1-ac2d-d612b4bb4aff%2FC05_%25EA%25B1%25B0%25EC%258B%25A4_3.jpg&blockId=137855f1-e498-8074-9507-e129f57d91d5',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F8abf5bc7-833e-4d8b-a856-b041a7c077bb%2FC05_%25EA%25B1%25B0%25EC%258B%25A4_4.jpg&blockId=137855f1-e498-8070-bce3-fae2822838c1',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F6406436c-aa15-4fde-b1d4-d1ab588a7cae%2FC05_%25EA%25B1%25B0%25EC%258B%25A45.jpg&blockId=137855f1-e498-8006-a427-fc187a434241',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fdd82fec2-21d3-4bcc-9224-8f1010d19c96%2FC05_%25EA%25B1%25B0%25EC%258B%25A46.jpg&blockId=137855f1-e498-8082-93d7-c9125ee276d9',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Ff928b7a4-e223-4a21-aaf9-d238a9ef1104%2FC05_%25EA%25B1%25B0%25EC%258B%25A47.jpg&blockId=137855f1-e498-8062-bf40-c8d03ca597ed',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Ff4f39469-4a67-4cfd-872d-b811e33d05da%2FC05_%25EC%258B%259D%25ED%2583%2581_1.jpg&blockId=137855f1-e498-80e5-a6eb-c4ab2500b32d',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fbefa2f02-3b66-46d3-a589-ceb733a2ef43%2FC05_%25EC%258B%259D%25ED%2583%2581_2.jpg&blockId=137855f1-e498-8001-817a-cf7ea6e76708',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F04def6c5-8a32-48ea-be7f-f89cdfa07fa9%2FC05_%25EC%258B%259D%25ED%2583%2581_3.jpg&blockId=137855f1-e498-8093-bb3a-e24e6ae88a1e',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fb4251768-2534-44b1-a1aa-7be2d591f460%2FC05_%25EC%25A3%25BC%25EB%25B0%25A9_1.jpg&blockId=137855f1-e498-8002-b90a-d1ec634c319d',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fc5aba358-dbbc-4eb3-ae60-d3a0ee970de9%2FC05_%25EC%25A3%25BC%25EB%25B0%25A92.jpg&blockId=137855f1-e498-80b9-b9c4-e1117f3fcfd6',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F6261beff-91ff-4e10-9dac-61ead5420b1d%2FC05_%25EC%25A3%25BC%25EB%25B0%25A93.jpg&blockId=137855f1-e498-8089-accf-c88ee9c077b5',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F5c933bb3-34eb-4992-b29a-ac557a869922%2FC05_%25EC%25A3%25BC%25EB%25B0%25A9_4.jpg&blockId=137855f1-e498-80d7-8b8a-cfb90fb768c8',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Ffa504a68-4573-4280-a521-ad390f91b17a%2FC05_%25EC%25A3%25BC%25EB%25B0%25A95.jpg&blockId=137855f1-e498-8034-95d3-fcb56304666e',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F1fa89e6a-b52c-46d0-978d-e3baea0aab9f%2Froom1.png&blockId=137855f1-e498-80ba-aff3-c8e313a07ffb',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Ff9a5d137-0bfa-432f-baa5-2b8c72b1627c%2Froom2.png&blockId=137855f1-e498-808d-97a3-e1c2c513121f',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F6c31d3d4-ab4a-45f5-bc0d-902d490a418d%2Froom3.png&blockId=137855f1-e498-80e8-a369-d42c3a283b49',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fee8206bf-3dd8-4723-98c1-318556d33e8b%2FC04_%25EA%25B0%259D%25EC%258B%25A41.png&blockId=137855f1-e498-8025-8fa2-e65438929101',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fe3b04093-98d9-4776-9fdb-40c258c76a52%2FC05_%25ED%2594%258C%25EB%259E%259C%25ED%2585%258C%25EB%25A6%25AC%25EC%2596%25B41.jpg&blockId=137855f1-e498-80fa-aeb3-c18d5a62e6d7',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F103ed3cd-9035-4112-ac26-a29b905a37b4%2FC05_%25ED%2594%258C%25EB%259E%259C%25ED%2585%258C%25EB%25A6%25AC%25EC%2596%25B42.jpg&blockId=137855f1-e498-80ac-901c-cd8afd0dca00',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F6fbee54c-c513-42b0-a997-641da3587944%2FC05_%25ED%2594%258C%25EB%259E%259C%25ED%2585%258C%25EB%25A6%25AC%25EC%2596%25B43.jpg&blockId=137855f1-e498-80d7-bef8-df7494f607de',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F96ee32f3-a0eb-4118-afb5-91027a21031a%2FC05_%25ED%2599%2594%25EC%259E%25A5%25EB%258C%2580.jpg&blockId=137855f1-e498-806f-8327-ef8db1e21eb0',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F9430a254-725d-4a77-8b4f-350bd0b98d91%2FC05_%25ED%2599%2594%25EC%259E%25A5%25EB%258C%25802.jpg&blockId=137855f1-e498-80f9-90f0-d873b5980409',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fcfd2710a-2561-428a-ac80-2266d8f6f2ae%2FC05_%25ED%2599%2594%25EC%259E%25A5%25EC%258B%25A41.png&blockId=137855f1-e498-80bd-98c4-ebc4007ff75a',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F2d0054c0-a41f-45ca-b72a-1cc120612e38%2FC05_%25ED%2599%2594%25EC%259E%25A5%25EC%258B%25A42.jpg&blockId=137855f1-e498-804b-8426-f4e624ed479f',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fd3cb19bd-f4a3-4d60-bc2c-08baaebf4f7b%2FC05_%25ED%2599%2594%25EC%259E%25A5%25EC%258B%25A43.jpg&blockId=137855f1-e498-80ba-8b44-efdab966b633',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fc3639483-12e6-4253-8c9b-d3fa0f89d3c2%2F20241103_130747.jpg&blockId=137855f1-e498-80d8-8a37-fe6bf81ea07d',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fbfd12ffc-4f98-4c16-b087-67e3e5251c8b%2F20241103_192446.jpg&blockId=137855f1-e498-802b-932d-ebd6e07bd2f1',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F69de815a-b147-477e-a176-39cc3084d9ac%2F20241103_192538.jpg&blockId=137855f1-e498-803a-9cd6-da3281ebc794',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Ff4d410b2-9a2a-442f-83e1-f02594fe8a7f%2F20241103_193353%280%29.jpg&blockId=137855f1-e498-80fc-a038-fc15de81e5ef',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fabec9e74-8910-4a88-889a-d72366947ad6%2F20241104_095016.jpg&blockId=137855f1-e498-80e1-8fe9-d8a7c03b1ae6',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fc7c58c1f-fc44-427a-9259-2f1df693bead%2F20241104_095155.jpg&blockId=137855f1-e498-80e1-86ba-c9cd2bbe2b56',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2Fe75477eb-2f16-4e97-9c8b-b8c8011e2e21%2FDAT1.png&blockId=137855f1-e498-8050-8cbe-e4ef95a23d72',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F6d8f2b8e-91bc-40ca-a35f-0b5d31adfb4c%2FNIGHT1.png&blockId=137855f1-e498-80d9-99e8-ccac9642501e',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F3f92f590-4b3d-4793-b8c2-f84dcb8c509a%2FNIGHT3.jpg&blockId=137855f1-e498-8092-add5-ee67627de57d',
IMG + 'https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31e91f60-5c1e-4754-96eb-9498bca2381b%2F2c1c6a83-aab4-4066-9d3a-d2317b56f1bb%2F20241103_130249.jpg&blockId=137855f1-e498-80ad-8208-ee6cd80d99e6'
];
/* 프라이빗 료칸(자쿠지) 사진 — 첫 장 가로 전체 + 2열
※ 료칸은 전 객실 공용 별채 시설이라 다른 객실과 동일한 사진을 사용해요. */
var RYOKAN = [
IMG + 'attachment%3A9866536f-c785-4da5-9ded-2d4adea2f03b%3A%EB%B3%84%EC%B1%84%ED%83%95_%EC%A0%84%EC%B2%B4%EC%83%B7.png%EC%9D%98_%EC%82%AC%EB%B3%B8.png&blockId=2a8855f1-e498-8048-9e19-f214b9b96ecc',
IMG + 'attachment%3A24454625-f661-412e-9fb6-eb802905a678%3A%EB%B3%84%EC%B1%84%ED%83%95_%EC%9A%95%EC%A1%B03.png%EC%9D%98_%EC%82%AC%EB%B3%B8.png&blockId=2a8855f1-e498-8005-b28d-c251dce8630c',
IMG + 'attachment%3Ae4c2597a-d8ac-43cb-abcd-53bd958c0985%3A%EB%B3%84%EC%B1%84%ED%83%95_%ED%99%94%EC%9E%A5%EB%8C%80.png%EC%9D%98_%EC%82%AC%EB%B3%B8.png&blockId=2a8855f1-e498-809a-8c00-c6e91d6f0bc4',
IMG + 'attachment%3A1d7e4ef7-e4bf-44c9-91f1-2baeda9e52da%3A%EB%B3%84%EC%B1%84%ED%83%95_%EC%9A%95%EC%A1%B01.png%EC%9D%98_%EC%82%AC%EB%B3%B8.png&blockId=2a8855f1-e498-8003-b8d0-cff9276115c7',
IMG + 'attachment%3Adbe94166-84f1-46ce-bcd5-1b26a5118793%3A%EB%B3%84%EC%B1%84%ED%83%95_%EC%9A%95%EC%A1%B02.png%EC%9D%98_%EC%82%AC%EB%B3%B8.png&blockId=2a8855f1-e498-80c8-b70f-c82e7a145dea'
];
/* 공유 버튼이 복사할 페이지 주소 */
var SHARE_URL = 'https://www.penton9.com/c05';
/* 기본 언어: 'ko'(한국어), 'en'(영어), 'zh'(번체), 'cn'(간체) */
var DEFAULT_LANG = 'ko';
/* ── 4개 언어 문구 — ko/en/zh/cn 짝으로 수정하세요 ── */
var I18N = new Map();
I18N.set('crumb', {
ko: '부산 송정 오션뷰 단체 펜션, 펜톤나인 › 객실 › <b>[C05] White Shore</b>',
en: 'Penton Nine, Songjeong, Busan › Rooms › <b>[C05] White Shore</b>',
zh: '釜山松亭 Penton Nine › 客房 › <b>[C05] White Shore</b>',
cn: '釜山松亭 Penton Nine › 客房 › <b>[C05] White Shore</b>' });
I18N.set('share', { ko: '공유', en: 'Share', zh: '分享', cn: '分享' });
I18N.set('stats', {
ko: '기준 6명 · 최대 14명',
en: '6 guests standard · up to 14',
zh: '基準6人 · 最多14人',
cn: '基准6人 · 最多14人' });
I18N.set('stats2', {
ko: '방 3개 · 침대 4개 · 매트리스 6개 · 화장실 2개 · 40평',
en: '3 bedrooms · 4 beds · 6 mattresses · 2 bathrooms · approx. 132㎡',
zh: '3房 · 4床 · 床墊6組 · 2衛浴 · 約132㎡',
cn: '3房 · 4床 · 床垫6组 · 2卫浴 · 约132㎡' });
I18N.set('feat1t', { ko: '창밖으로 펼쳐지는 오션뷰', en: 'An ocean view out the window', zh: '窗外一望無際的海景', cn: '窗外一望无际的海景' });
I18N.set('feat1d', {
ko: '이름 그대로 White Shore — 화이트 톤의 밝은 공간에서 송정 바다가 보여요. 2호점 꼭대기 층이에요.',
en: 'True to its name, White Shore — a bright, white-toned space on the top floor, looking out to the Songjeong sea.',
zh: '如其名 White Shore——白色調的明亮空間,位於2號館頂層,可望見松亭海。',
cn: '如其名 White Shore——白色调的明亮空间,位于2号馆顶层,可望见松亭海。' });
I18N.set('feat2t', { ko: '프라이빗 자쿠지 (예약제)', en: 'Private jacuzzi (by reservation)', zh: '私人按摩浴缸(預約制)', cn: '私人按摩浴缸(预约制)' });
I18N.set('feat2d', {
ko: '별채에 마련된 온수 스파를 예약제로 이용할 수 있어요. 한 팀만 단독 사용해요.',
en: 'A hot-water spa in the annex, available by reservation — one group at a time.',
zh: '可預約使用設於別館的溫水SPA,一組客人專屬使用。',
cn: '可预约使用设于别馆的温水SPA,一组客人专属使用。' });
I18N.set('feat3t', { ko: '루프탑 야외 풀 (무료)', en: 'Rooftop outdoor pool (free)', zh: '頂樓戶外泳池(免費)', cn: '顶楼户外泳池(免费)' });
I18N.set('feat3d', {
ko: '5~9월 시즌 동안 시간대별 예약제로 무료 이용할 수 있어요.',
en: 'Free to use during the May–September season, by hourly reservation.',
zh: '5~9月開放期間,採時段預約制免費使用。',
cn: '5~9月开放期间,采用时段预约制免费使用。' });
I18N.set('infoT', { ko: '객실 정보', en: 'Room details', zh: '客房資訊', cn: '客房信息' });
I18N.set('infoS', { ko: '체크인 전에 확인해주세요.', en: 'Please check before your stay.', zh: '入住前請先確認。', cn: '入住前请先确认。' });
I18N.set('info1t', { ko: '체크인 15:00 · 체크아웃 11:00', en: 'Check-in 3:00 PM · Check-out 11:00 AM', zh: '入住 15:00 · 退房 11:00', cn: '入住 15:00 · 退房 11:00' });
I18N.set('info1d', {
ko: '얼리 체크인·레이트 체크아웃은 사전에 문의해주세요.',
en: 'Please contact us in advance for early check-in or late check-out.',
zh: '提前入住或延遲退房請事先洽詢。',
cn: '提前入住或延迟退房请事先咨询。' });
I18N.set('info2t', { ko: '기준 6명 · 최대 14명', en: '6 guests standard · up to 14', zh: '基準6人 · 最多14人', cn: '基准6人 · 最多14人' });
I18N.set('info2d', {
ko: '가족 모임, 워크샵 등 단체 여행에 넉넉한 사이즈예요.',
en: 'Roomy enough for family gatherings, retreats, and group trips.',
zh: '家族聚會、團體旅行都綽綽有餘。',
cn: '家族聚会、团体旅行都绰绰有余。' });
I18N.set('info3t', { ko: '40평 · 방 3 · 화장실 2 · 거실 · 주방', en: '~132㎡ · 3BR · 2BA · living room · kitchen', zh: '約132㎡ · 3房 · 2衛浴 · 客廳 · 廚房', cn: '约132㎡ · 3房 · 2卫浴 · 客厅 · 厨房' });
I18N.set('info3d', {
ko: '2호점 꼭대기 층. 바다가 보이는 거실을 중심으로 퀸 침대 방 3개가 이어져요.',
en: 'The top floor of Building C — three queen-bed rooms open off a living room with a sea view.',
zh: '位於2號館頂層,以能望見大海的客廳為中心,連接3間Queen床臥室。',
cn: '位于2号馆顶层,以能望见大海的客厅为中心,连接3间Queen床卧室。' });
I18N.set('layoutT', { ko: '잠자리 구성', en: 'Where you\'ll sleep', zh: '睡寢配置', cn: '睡寝配置' });
I18N.set('layoutS', {
ko: '전 객실 퀸 침대 구성이에요. 퀸은 2명, 엑스트라 매트리스는 각 1명이 잘 수 있어요.',
en: 'All bedrooms have queen beds — each sleeps two, and each floor mattress sleeps one.',
zh: '所有臥室皆為Queen床,每張可睡2人,加鋪床墊各可睡1人。',
cn: '所有卧室均为Queen床,每张可睡2人,加铺床垫各可睡1人。' });
I18N.set('totalBeds', {
ko: '퀸 4개 · 매트리스 6개 = 최대 14명 (기준 6명)',
en: '4 queen beds · 6 mattresses = up to 14 guests (6 standard)',
zh: 'Queen床4張 · 床墊6組 = 最多14人(基準6人)',
cn: 'Queen床4张 · 床垫6组 = 最多14人(基准6人)' });
I18N.set('amenT', { ko: '편의시설', en: 'Amenities', zh: '設施與備品', cn: '设施与备品' });
I18N.set('amenS', {
ko: '단체 여행에 필요한 것들을 갖췄어요.',
en: 'Everything a group trip needs.',
zh: '團體旅行所需一應俱全。',
cn: '团体旅行所需一应俱全。' });
I18N.set('addonT', { ko: '추가 서비스', en: 'Add-on services', zh: '加購服務', cn: '加购服务' });
I18N.set('addonS', {
ko: '예약 시 함께 신청할 수 있어요.',
en: 'Can be added when you book.',
zh: '預約時可一併申請。',
cn: '预约时可一并申请。' });
I18N.set('openNewTab', { ko: '새 탭에서 열기 ↗', en: 'Open in new tab ↗', zh: '在新分頁開啟 ↗', cn: '在新标签页打开 ↗' });
I18N.set('fallbackMsg', {
ko: '이 페이지는 창 안에서 바로 열 수 없어요.',
en: 'This page can\'t be displayed inside the window.',
zh: '此頁面無法在視窗內直接開啟。',
cn: '此页面无法在窗口内直接打开。' });
I18N.set('seeMore', { ko: '자세히 보기', en: 'Learn more', zh: '查看詳情', cn: '查看详情' });
I18N.set('addonNote', {
ko: '바베큐 · 자쿠지 · 루프탑 풀은 예약이 필요해요. 세탁은 머무는 동안 언제든 신청할 수 있어요.',
en: 'The BBQ, jacuzzi and rooftop pool require a reservation. Laundry can be requested anytime during your stay.',
zh: '燒烤、湯屋與頂樓泳池需預約;洗衣服務住宿期間隨時可申請。',
cn: '烧烤、汤屋与顶楼泳池需预约;洗衣服务住宿期间随时可申请。' });
I18N.set('dealT', {
ko: '공식 홈페이지 단독 특가',
en: 'Official-site exclusive deal',
zh: '官網獨家特價',
cn: '官网独家特价' });
I18N.set('dealD', {
ko: '예약사이트보다 더 저렴한 공홈 전용 시크릿 가격이 준비돼 있어요.',
en: 'Secret prices lower than booking platforms — only on our official site.',
zh: '比訂房網站更便宜的官網專屬秘密價格。',
cn: '比订房网站更便宜的官网专属秘密价格。' });
I18N.set('dealC', { ko: '특가 보러가기 →', en: 'See the deals →', zh: '查看特價 →', cn: '查看特价 →' });
I18N.set('photoT', { ko: '객실 사진', en: 'Photos', zh: '客房照片', cn: '客房照片' });
I18N.set('photoS', {
ko: '화이트 톤 거실과 침실, 플랜테리어 공간, 그리고 바로 위 루프탑 풀까지.',
en: 'The ocean-view living room, the bedrooms, and the rooftop pool.',
zh: '海景客廳、臥室,以及頂樓泳池。',
cn: '海景客厅、卧室,以及顶楼泳池。' });
I18N.set('ryoT', { ko: '프라이빗 료칸 (자쿠지)', en: 'Private ryokan bath', zh: '私人湯屋', cn: '私人汤屋' });
I18N.set('ryoS', {
ko: '별채에 마련된 프라이빗 온수 스파. 예약제로 한 팀만 단독 이용해요.',
en: 'A private hot-water spa in the annex — reserved for one group at a time.',
zh: '設於別館的私密溫水SPA,採預約制,一組客人專屬使用。',
cn: '设于别馆的私密温水SPA,采用预约制,一组客人专属使用。' });
I18N.set('noPhoto', { ko: '사진 준비 중', en: 'Photos coming soon', zh: '照片準備中', cn: '照片准备中' });
I18N.set('imgAlt', { ko: '펜톤나인 C05 White Shore', en: 'Penton Nine C05 White Shore', zh: 'Penton Nine C05 White Shore', cn: 'Penton Nine C05 White Shore' });
I18N.set('shareTitle', { ko: '펜톤나인 [C05] White Shore', en: 'Penton Nine [C05] White Shore', zh: 'Penton Nine [C05] White Shore', cn: 'Penton Nine [C05] White Shore' });
I18N.set('toastCopied', { ko: '링크가 복사되었어요', en: 'Link copied', zh: '已複製連結', cn: '已复制链接' });
I18N.set('toastFail', { ko: '복사에 실패했어요', en: 'Copy failed', zh: '複製失敗', cn: '复制失败' });
/* =============================================
이하 로직 — 수정 불필요
============================================= */
var currentLang = DEFAULT_LANG;
var ICON_CHECK = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><polyline points="20 6 9 17 4 12"/></svg>';
var ICON_CAM = '<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>';
var SVG_HEAD = '<svg width="58" height="44" viewBox="0 0 48 36" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">';
/* 퀸 침대: 위에서 본 넓은 침대 + 나란히 누운 2명 (2인용임을 명확히) */
var ICON_QUEEN = SVG_HEAD
+ '<rect x="2.5" y="2.5" width="43" height="31" rx="3.5"/>'
+ '<line x1="2.5" y1="19" x2="45.5" y2="19"/>'
+ '<line x1="24" y1="19" x2="24" y2="33.5"/>'
+ '<circle cx="14" cy="10" r="3.4"/>'
+ '<path d="M8 19v-1.6a6 6 0 0 1 12 0V19"/>'
+ '<circle cx="34" cy="10" r="3.4"/>'
+ '<path d="M28 19v-1.6a6 6 0 0 1 12 0V19"/></svg>';
/* 슈퍼싱글: 위에서 본 좁은 침대 + 누운 1명 */
var ICON_SINGLE = SVG_HEAD
+ '<rect x="14.5" y="2.5" width="19" height="31" rx="3.5"/>'
+ '<line x1="14.5" y1="19" x2="33.5" y2="19"/>'
+ '<circle cx="24" cy="10" r="3.4"/>'
+ '<path d="M18 19v-1.6a6 6 0 0 1 12 0V19"/></svg>';
/* 엑스트라 매트리스: 프레임 없이 바닥에 깐 매트리스 + 누운 1명 */
var ICON_MATTRESS = SVG_HEAD
+ '<rect x="15" y="3" width="18" height="27" rx="7"/>'
+ '<line x1="15" y1="18" x2="33" y2="18"/>'
+ '<circle cx="24" cy="9.5" r="3.2"/>'
+ '<path d="M18.5 18v-1.4a5.5 5.5 0 0 1 11 0V18"/>'
+ '<line x1="9" y1="33.5" x2="39" y2="33.5" stroke-dasharray="3 3"/></svg>';
/* 숯불그릴: 그릴 위로 피어오르는 불꽃 */
var ICON_BBQ = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">'
+ '<line x1="2.5" y1="11" x2="21.5" y2="11"/>'
+ '<path d="M4.5 11a7.5 7.5 0 0 0 15 0"/>'
+ '<line x1="7.5" y1="17" x2="6" y2="21"/><line x1="16.5" y1="17" x2="18" y2="21"/>'
+ '<path d="M10.6 8c-.9-.8-1.2-1.9-.6-3 .1 .8 .7 1.2 1.3 1.5 1 .5 1.7 1 1.7 1.5"/>'
+ '<path d="M14 8c.6-.6.7-1.4.3-2.2"/></svg>';
/* 자쿠지: 욕조 + 물방울(버블) */
var ICON_JACUZZI = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">'
+ '<path d="M3 12h18v2.5a5 5 0 0 1-5 5H8a5 5 0 0 1-5-5V12z"/>'
+ '<path d="M6 12V6.5a2 2 0 0 1 4 0"/>'
+ '<circle cx="14.5" cy="7" r=".9"/><circle cx="17.5" cy="5.2" r=".7"/><circle cx="17" cy="9" r=".6"/>'
+ '<line x1="7.5" y1="22" x2="8" y2="20"/><line x1="16.5" y1="22" x2="16" y2="20"/></svg>';
var ICON_ARROW = '<svg class="farrow" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg>';
/* 패밀리 침대: 위에서 본 넓은 침대 + 어른 2 + 아이 1 */
var ICON_FAMILY = SVG_HEAD
+ '<rect x="2.5" y="2.5" width="43" height="31" rx="3.5"/>'
+ '<line x1="2.5" y1="19" x2="45.5" y2="19"/>'
+ '<circle cx="11" cy="10" r="3.1"/>'
+ '<path d="M5.5 19v-1.5a5.5 5.5 0 0 1 11 0V19"/>'
+ '<circle cx="23" cy="10" r="3.1"/>'
+ '<path d="M17.5 19v-1.5a5.5 5.5 0 0 1 11 0V19"/>'
+ '<circle cx="35" cy="11.5" r="2.5"/>'
+ '<path d="M31 19v-1a4 4 0 0 1 8 0v1"/></svg>';
/* 루프탑 야외 풀: 물결 + 다이빙보드 */
var ICON_POOL = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">'
+ '<path d="M2 15c1.8 1.4 3.6 1.4 5.4 0s3.6-1.4 5.4 0 3.6 1.4 5.4 0 2.1-.9 3.8-.9"/>'
+ '<path d="M2 20c1.8 1.4 3.6 1.4 5.4 0s3.6-1.4 5.4 0 3.6 1.4 5.4 0 2.1-.9 3.8-.9"/>'
+ '<path d="M7 15V5.5a2 2 0 0 1 2-2h3"/>'
+ '<path d="M13 15V8"/>'
+ '<circle cx="16.5" cy="5" r="1.4"/></svg>';
/* 세탁 서비스: 세탁기 + 물결(빨래) */
var ICON_LAUNDRY = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round">'
+ '<rect x="4" y="2.5" width="16" height="19" rx="2.5"/>'
+ '<line x1="4" y1="7" x2="20" y2="7"/>'
+ '<circle cx="7.5" cy="4.8" r=".8"/><circle cx="10.5" cy="4.8" r=".8"/>'
+ '<circle cx="12" cy="14" r="5"/>'
+ '<path d="M7.6 12.6c1.1.9 2.2.9 3.3 0s2.2-.9 3.3 0 1.3.8 2.2.2"/></svg>';
var ICON_PERSON = '<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>';
var BED_ICONS = new Map();
BED_ICONS.set('queen', ICON_QUEEN);
BED_ICONS.set('single', ICON_SINGLE);
BED_ICONS.set('mattress', ICON_MATTRESS);
BED_ICONS.set('laundry', ICON_LAUNDRY);
BED_ICONS.set('family', ICON_FAMILY);
BED_ICONS.set('pool', ICON_POOL);
BED_ICONS.set('bbq', ICON_BBQ);
BED_ICONS.set('jacuzzi', ICON_JACUZZI);
function pick(pair) {
if (!pair) return '';
return currentLang === 'en' ? pair.en : (currentLang === 'zh' ? pair.zh : (currentLang === 'cn' ? pair.cn : pair.ko));
}
function t(key) {
return pick(I18N.get(key));
}
function applyLang() {
var root = document.getElementById('p9C05Page');
if (!root) return;
var scopes = [root];
var modalEl = document.getElementById('p9c5Modal');
if (modalEl && modalEl.parentNode !== root) scopes.push(modalEl);
for (var s = 0; s < scopes.length; s++) {
var nodes = scopes[s].querySelectorAll('[data-t]');
for (var i = 0; i < nodes.length; i++) {
var item = I18N.get(nodes[i].getAttribute('data-t'));
if (item) nodes[i].innerHTML = pick(item);
}
}
var btns = root.querySelectorAll('[data-p9c5-lang]');
for (var j = 0; j < btns.length; j++) {
btns[j].classList.toggle('on', btns[j].getAttribute('data-p9c5-lang') === currentLang);
}
buildGallery();
buildLayout();
buildFacility();
buildAmen();
buildPhotoGrid('p9c5Photos', PHOTOS);
buildPhotoGrid('p9c5Ryokan', RYOKAN);
}
function imgOrPh(url, extraClass) {
if (url) {
return '<img class="' + (extraClass || '') + '" src="' + url + '" alt="' + t('imgAlt') + '" loading="lazy">';
}
return '<div class="p9c5-noimg ' + (extraClass || '') + '">' + ICON_CAM + '<span>' + t('noPhoto') + '</span></div>';
}
function buildGallery() {
var box = document.getElementById('p9c5Gallery');
if (!box) return;
var html = '';
for (var i = 0; i < GALLERY.length; i++) {
var pos = (i === 0) ? ' p9c5-main' : '';
html += imgOrPh(GALLERY[i], 'p9c5-ph' + pos);
}
box.innerHTML = html;
}
function normIcons(icon) {
if (typeof icon === 'string') return [{ t: icon, n: 1 }];
var out = [];
for (var i = 0; i < icon.length; i++) {
var it = icon[i];
if (typeof it === 'string') out.push({ t: it, n: 1 });
else out.push({ t: it.t, n: it.n || 1 });
}
return out;
}
function buildLayout() {
var box = document.getElementById('p9c5Layout');
if (!box) return;
var html = '';
for (var i = 0; i < LAYOUT.length; i++) {
var b = LAYOUT[i];
/* 침대 개수만큼 아이콘을 반복 표시. 4개 이상이면 아이콘 1개 + ×N 으로 축약 */
var groups = normIcons(b.icon);
var iconHtml = '';
for (var g = 0; g < groups.length; g++) {
var svg = BED_ICONS.get(groups[g].t) || '';
var n = groups[g].n;
if (n <= 3) {
for (var k = 0; k < n; k++) iconHtml += svg;
} else {
iconHtml += svg + '<span class="xn">\u00d7' + n + '</span>';
}
}
html += '<div class="cell">'
+ '<div class="icons">' + iconHtml + '</div>'
+ '<div class="txt">'
+ '<div class="cap">' + pick(b.cap) + '</div>'
+ '<div class="beds">' + pick(b.beds) + '</div>'
+ '<span class="p9c5-cap">' + ICON_PERSON + pick(b.guest) + '</span>'
+ '</div></div>';
}
box.innerHTML = html;
}
function buildFacility() {
var box = document.getElementById('p9c5Fac');
if (!box) return;
var html = '';
for (var i = 0; i < FACILITY.length; i++) {
var f = FACILITY[i];
var tag = f.link ? 'a' : 'div';
var attr = f.link ? ' href="' + f.link + '"' : '';
html += '<' + tag + ' class="cell" data-idx="' + i + '"' + attr + '>'
+ (BED_ICONS.get(f.icon) || '')
+ '<b>' + pick(f.name) + (f.link ? ICON_ARROW : '') + '</b>'
+ '<div class="fdesc">' + pick(f.desc) + '</div>'
+ '<div class="frow">'
+ '<span class="p9c5-cap">' + pick(f.tag) + '</span>'
+ '<span class="fprice">' + f.price + '</span>'
+ '</div>'
+ (f.link ? '<span class="fmore">' + t('seeMore') + '</span>' : '')
+ '</' + tag + '>';
}
box.innerHTML = html;
}
function buildAmen() {
var box = document.getElementById('p9c5Amen');
if (!box) return;
var html = '';
for (var i = 0; i < AMEN.length; i++) {
html += '<div class="item">' + ICON_CHECK + '<span>' + pick(AMEN[i]) + '</span></div>';
}
box.innerHTML = html;
}
function buildPhotoGrid(elId, urls) {
var box = document.getElementById(elId);
if (!box) return;
var html = '';
for (var i = 0; i < urls.length; i++) {
html += '<div class="cell">' + imgOrPh(urls[i]) + '</div>';
}
box.innerHTML = html;
}
function showToast(msg) {
var el = document.getElementById('p9c5Toast');
if (!el) return;
el.textContent = msg;
el.classList.add('on');
setTimeout(function() { el.classList.remove('on'); }, 1800);
}
function doShare() {
var url = SHARE_URL || (window.location ? window.location.href : '');
if (navigator.share) {
navigator.share({ title: t('shareTitle'), url: url }).catch(function() {});
} else if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(url).then(function() {
showToast(t('toastCopied'));
}).catch(function() { showToast(t('toastFail')); });
}
}
function init() {
var root = document.getElementById('p9C05Page');
if (!root) return;
/* 모달을 body 직속으로 옮겨, 조상 요소의 transform 영향 없이
항상 '지금 보고 있는 화면' 정중앙에 뜨도록 함 */
var modal = document.getElementById('p9c5Modal');
if (modal && modal.parentNode !== document.body) {
document.body.appendChild(modal);
}
if (modal) {
modal.addEventListener('click', function(e) {
if (e.target.closest('[data-p9c5-close]')) closeModal();
});
}
applyLang();
root.addEventListener('click', function(e) {
var langBtn = e.target.closest('[data-p9c5-lang]');
if (langBtn) {
var lang = langBtn.getAttribute('data-p9c5-lang');
if (lang !== currentLang) {
currentLang = lang;
applyLang();
}
return;
}
var closeBtn = e.target.closest('[data-p9c5-close]');
if (closeBtn) { closeModal(); return; }
var facLink = e.target.closest('#p9c5Fac a.cell');
if (facLink) {
e.preventDefault();
var idx = facLink.getAttribute('data-idx');
var f = FACILITY[idx ? Number(idx) : 0];
if (f && f.link) openModal(f.link, pick(f.name));
return;
}
var shareBtn = e.target.closest('[data-p9c5-share]');
if (shareBtn) doShare();
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') closeModal();
});
}
var modalTimer = null;
var savedScroll = 0;
function openModal(url, title) {
var m = document.getElementById('p9c5Modal');
var frame = document.getElementById('p9c5ModalFrame');
if (!m || !frame) return;
document.getElementById('p9c5ModalTitle').textContent = title || '';
var newLink = document.getElementById('p9c5ModalNew');
var fallLink = document.getElementById('p9c5ModalFallLink');
if (newLink) newLink.href = url;
if (fallLink) fallLink.href = url;
m.classList.remove('fallback');
frame.src = url;
m.classList.add('on');
savedScroll = window.pageYOffset || document.documentElement.scrollTop || 0;
document.body.style.overflow = 'hidden';
/* 외부에서 iframe 표시를 막는 경우를 대비한 대체 안내 */
var loaded = false;
frame.onload = function() { loaded = true; };
if (modalTimer) clearTimeout(modalTimer);
modalTimer = setTimeout(function() {
if (!loaded) m.classList.add('fallback');
}, 4000);
}
function closeModal() {
var m = document.getElementById('p9c5Modal');
var frame = document.getElementById('p9c5ModalFrame');
if (!m || !m.classList.contains('on')) return;
if (modalTimer) { clearTimeout(modalTimer); modalTimer = null; }
m.classList.remove('on');
m.classList.remove('fallback');
if (frame) frame.src = 'about:blank';
document.body.style.overflow = '';
if (savedScroll) window.scrollTo(0, savedScroll);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
</script>